LINUX.ORG.RU
ФорумAdmin

Proxmox. Подскажите как правильно настроить внешние ip для виртуальных машин

 , , ,


1

1

Здравствуйте, очень нуждаюсь в помощи опытных администраторов. С сетями не очень дружу, пытаюсь разбираться, но очень сложно пока. Перечитал тонны мануалов, везде по-разному все пишут.

У меня есть сервер и куплены 3 дополнительных ip адреса.

Необходимо создать 3 виртуальных машины с windows с внешними ip и доступом по rdp.

Первоначальный конфиг был примерно такой, единственное, что я добавил мост vmbr0, который смотрит в eth0 (предварительно удалив из него адрес гейта):


source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

allow-hotplug eth0

iface eth0 inet static
        address  185.XX.XX.48
        netmask  25
        dns-nameservers 37.XX.XX.137 91.XX.XX.225 3a00:c78:2070:a054::53 3a00:c78:2200:a01
        dns-search ruprovider.net
# dns-* options are implemented by the resolvconf package, if installed

allow-hotplug eth0:1

auto eth0:1
iface eth0:1 inet static
        address  185.XX.XX.109
        netmask  255.255.255.255

allow-hotplug eth0:2

auto eth0:2
iface eth0:2 inet static
        address  185.XX.XX.110
        netmask  255.255.255.255

allow-hotplug eth0:3

auto eth0:3
iface eth0:3 inet static
        address  185.XX.XX.108
        netmask  255.255.255.255

iface eth1 inet manual

auto vmbr0
iface vmbr0 inet static
        address  185.XX.XX.48
        netmask  25
        gateway  185.XX.XX.1
        bridge-ports eth0
        bridge-stp off
        bridge-fd 0

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
    link/ether d7:ac:52:e5:4d:5a brd ff:ff:ff:ff:ff:ff
    inet 185.XX.XX.48/25 brd 185.XX.XX.127 scope global eth0
       valid_lft forever preferred_lft forever
    inet 185.XX.XX.109/32 brd 185.XX.XX.109 scope global eth0:1
       valid_lft forever preferred_lft forever
    inet 185.XX.XX.110/32 brd 185.XX.XX.110 scope global eth0:2
       valid_lft forever preferred_lft forever
    inet 185.XX.XX.108/32 brd 185.XX.XX.108 scope global eth0:3
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether d7:ac:52:e5:4d:5d brd ff:ff:ff:ff:ff:ff
4: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d7:ac:52:e5:4d:5a brd ff:ff:ff:ff:ff:ff
    inet 185.XX.XX.48/25 brd 185.XX.XX.127 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::d6ae:52ff:fec5:3d5d/64 scope link
       valid_lft forever preferred_lft forever
5: tap100i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UNKNOWN group default qlen 1000
    link/ether 2a:25:c9:26:02:40 brd ff:ff:ff:ff:ff:ff

В таком виде сеть на виртуальных машинах не работает, шлюз не пингуется. Может быть кто-то может подсказать как вообще правильно это реализовать?

С технической поддержкой у того хостера все очень сложно.

А поставить на виртуалках внутренний адрес и просто натить с разных внешних адресов на внутренние не вариант?

У нас 1с так работает, проблем нет. И безопаснее, с винды только rdp порт наружу торчит.

Для линукса, которым вот прямо надо наружу внешним адресом используем маршрутизацию без моста. Где-то то есть статья на их wiki, если надо - могу поискать.

skyman ★★ ()

1. паблик IP адреса провайдер настроил у себя? проверить нужно для начала. Выданные IP пингуются?
2. Для «проброса» паблик IP создается бридж с интерфейсом который смотрит в провайдера в /etc/network/interfaces

auto vmbr0
iface vmbr0 inet manual
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

и в настройках «Network» виртуальной машины при ее создании, в поле bridge указываете vmbr0
Более ничего не нужно, настраивайте IP в виртуалках
НА самом деле через vmbr пробрасываются не IP а широковещайтельный домен от провайдера, в котором провайдер сделал настройки чтобы эти IP заработали, до интерфейсов которые смотрят в виртуалки
vmbr - это программный коммутатор, посмотреть интерфейсы широковещательного домена (коммутатора)
# brctl show vmbr0
bridge name     bridge id               STP enabled     interfaces
vmbr0           8000.001e673707dc       no              eth0
                                                        tap108i0
                                                        tap155i0
                                                        tap160i0
                                                        tap163i0
                                                        tap164i0
                                                        tap166i0
                                                        tap167i0

т.е. видим что vmbr0 (коммутатор) объединяет физический интерфейс eth0 с программными tapХХХ, которые смотрят в виртуалки, т.е. интерфейсы физический и программные находятся в одном широковещательном домене.

Удалите все лишнее из Вашего конфига и начните с малого.

Vlad-76 ★★★ ()
Последнее исправление: Vlad-76 (всего исправлений: 2)

Тут возможны 2 варианта:

1) через бридж - как у вас - засунуть eth0 в бридж (vmbr0), и в этот же бридж засунуть все виртуалки. Тогда вируалки будут видеть шлюз датацентра напрямую, сразу, default-ный маршрут у них будет такой же, как в proxmox.
Внешние IP адреса нужно будет указывать в виртуалках, на vmbr0 только 1 адрес для доступа к proxmox (родительской ОС), с eth0 вообще все убрать, они там ни к чему;

2) делать всё через маршрутизацию:
2.1) eth0 в бридж не всовываем, вешаем на него все внешние адреса. В бридж всунуты только виртуалки, на него вешаем локальный ip. Виртуалкам раздаём тоже локальные, указываем в них локальный ip vmbr0 как default gw. Для связи виртуалок с внешним миром в родительской ОС нужно будет делать NAT (SNAT/MASQUERADE для выхода наружу, DNAT - для доступа из мира);
2.2) то же, что и пункт 2.1, но на eth0 вешаем только один внешний адрес (для управления proxmox-ом), остальные внешние IP задаём в виртуалках. В родительской ОС на eth0 делаем proxy arp для адресов виртуалок (ip neigh add proxy ADDRESS dev eth0) + маршрутизацию этих адресов в vmbr0. В виртуалках указываем адрес eth0 как default gw.

spirit ★★★★★ ()

Вариант 1 вроде как самый простой, но может не везде работать. Некоторые датацентры жёстко привязывают все адреса сервера к его mac-адресу. В виртуалках же у каждой свой mac, поэтому трафик с них может не работать.
В таких случаях приходится делать вариант с маршрутизацией.

Когда не работает сеть, полезно послушать tcpdump-ом на разных интерфейсах - посмотреть что откуда выходит и куда идёт. Если делаете ping, ловите tcpdump-ом icmp и arp. Возможно прояснится на каком этапе происходит затык.

spirit ★★★★★ ()
Ответ на: комментарий от Deleted

Remote Desktop Protocol насколько я помню, сейчас опирается на TLS для обеспечения безопасности передаваемых данных. Поэтому можно говорить о том, что он безопасен ровно на столько, на сколько безопасна реализация TLS в Windows.

ZANSWER ()
Ответ на: комментарий от Deleted

Т.е. tls закрывает от мужика посередине, но никоим образом не закрывает дыры в реализации протокола rdp.

Deleted ()
Ответ на: комментарий от Deleted

Понял о чём вы хотели сказать изначально, согласен.

ZANSWER ()
Ответ на: комментарий от spirit

Добрый день. Огромнейшее спасибо всем за советы.

Пока что не могу попробовать и отписать о результате, т.к. дописал к начальному дефолтному конфигу по совету выше и после перезагрузки не смог подконнектиться.

auto vmbr0
iface vmbr0 inet manual
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

Вообще очень странно т.к. вряд ли данное изменение могло сеть положить. И на случай неправильной настройки у меня скрипт в кроне прописан, который через 5 минут восстанавливает дефолтный конфиг и перезагружает сервер, но почему-то он не сработал.

Теперь жду от хостера удаленную консоль, чтобы посмотреть, что там такое. Никак не выдадут..

debihard ()
Ответ на: комментарий от debihard

А собственно говоря почему у вас возникает трудности в этом плане? Раскладка такая: Поднимаете ваши три ВМ. Подключаете на сервак сетевой кабель. Создаете бридж с интерфейсом,на котором подключен сетевой кабель для внешних ip адресов. Для сетевухи ненужно назначать ip адрес. И далее назначаете созданный бридж для данных виртуалок. Заходите в сами виртуалки и прописываете все сетевые настройки (для каждого свой внешний ip адрес)

anonymous ()
Ответ на: комментарий от debihard

если на «том же» физ интерфейсе нужно на сервер доступ по IP организовать

auto vmbr0
iface vmbr0 inet static
        address 10.10.1.2
        netmask 255.255.255.0
        gateway 10.10.1.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

либо серый (10.10.1.2) либо белый поднимайте, в зависимости от задачи
настройки DNS здесь задайте
# cat /etc/resolv.conf
search <ваш домен>
nameserver <dns_server_IP>

Vlad-76 ★★★ ()
Последнее исправление: Vlad-76 (всего исправлений: 2)
Ответ на: комментарий от debihard

Вообще очень странно т.к. вряд ли данное изменение могло сеть положить.

А у тебя раньше ip-адрес на eth0 был, по которому ты коннектился на proxmox?

Тогда чего тут странного, не пойму.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.