Иногда нужно иметь часть виртуальных машин с внешним ("белым") IP и нормальным функционированием с Интернетом, а иногда виртуальным машинам нежелательно висеть наружу потрохами (как например LDAP-серверу). Если физическая хост-машина только одна, а виртуалки надо делать и так и так, то вот выход - создать еще одну сеть, только виртуальную, и к ней зацепиться бриджем.
Итак у нас есть интерфейс eth0 с сетью 222.111.123.231 (маска и шлюз тоже имеются) и ничего больше. Пусть внутренняя сеть имеет адресацию 192.168.0.0/24.
Сначала нам понадобится дополнительный интерфейс-пустышка, у которого будет собственный внутренний адрес, чтобы хост-машина могла общаться со своими виртуалками, а также работать им шлюзом:
Если вывода не было, значит нужно подключить модуль, а если показалось что-то, то этот шаг пропустить.
Импорт модуля:
Теперь надо настроить два интерфейса (реальный eth0 и виртуальный dummy0) и два бриджа (в реальную сеть vmbr0 и в виртуальную vmbr1). Вот так изменится конфиг интерфейсов:
Как видите сразу же после запуска vmbr1 добавляется правило NAT в iptables для того, чтобы машины из внутренней подсети могли ходить в интернет сами.
Прошу обратить внимание на -s 192.168.0.0/16 - нужно отделить поток именно с этих адресов, в пакеты, которым будет сменен source-address. Потому что если вы будете менять вообще всему трафику, то у Вас и траффик с внешних интерфейсов пойдет со подмененным исходным, хотя он и так с нормальным адресом был сделан.
Осталось добавить интерфейс dummy0 в во внутренний бридж vmbr1:
И теперь можно перезапускать машину.
Только 10 раз подумайте, сможете ле Вы до нее добраться в случае, если что-то пошло не так и сеть отлетела!
Итак у нас есть интерфейс eth0 с сетью 222.111.123.231 (маска и шлюз тоже имеются) и ничего больше. Пусть внутренняя сеть имеет адресацию 192.168.0.0/24.
Сначала нам понадобится дополнительный интерфейс-пустышка, у которого будет собственный внутренний адрес, чтобы хост-машина могла общаться со своими виртуалками, а также работать им шлюзом:
lsmod | grep dummy
Если вывода не было, значит нужно подключить модуль, а если показалось что-то, то этот шаг пропустить.
Импорт модуля:
echo "dummy" >> /etc/modulesmodprobe dummy
Теперь надо настроить два интерфейса (реальный eth0 и виртуальный dummy0) и два бриджа (в реальную сеть vmbr0 и в виртуальную vmbr1). Вот так изменится конфиг интерфейсов:
vi /etc/network/interfaces
# Loopback device:
auto lo
iface lo inet loopback
# Wide Area Network
auto vmbr0
iface vmbr0 inet static
address 222.111.123.231
netmask 255.255.255.196
gateway 222.111.123.227
bridge_ports eth0
bridge_stp off
bridge_fd 0
# Real phisical device: eth0
auto eth0
iface eth0 inet manual
# default route to access subnet
up route add -net 222.111.123.226 netmask 255.255.255.196 gw 222.111.123.227 vmbr0
# Local Area Network
auto vmbr1
iface vmbr1 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge_ports dummy0
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o vmbr0 -j SNAT --to-source 222.111.123.231
post-up iptables -t nat -A POSTROUTING -o vmbr1 -j SNAT --to-source 192.168.0.1
post-down iptables -t nat -D POSTROUTING -s 192.168.0.0/16 -o vmbr0 -j SNAT --to-source 222.111.123.231
post-down iptables -t nat -D POSTROUTING -o vmbr1 -j SNAT --to-source 192.168.0.1
# Dummy device for LAN
auto dummy0
iface dummy0 inet manual
Как видите сразу же после запуска vmbr1 добавляется правило NAT в iptables для того, чтобы машины из внутренней подсети могли ходить в интернет сами.
Прошу обратить внимание на -s 192.168.0.0/16 - нужно отделить поток именно с этих адресов, в пакеты, которым будет сменен source-address. Потому что если вы будете менять вообще всему трафику, то у Вас и траффик с внешних интерфейсов пойдет со подмененным исходным, хотя он и так с нормальным адресом был сделан.
Осталось добавить интерфейс dummy0 в во внутренний бридж vmbr1:
brctl addif vmbr1 dummy0Проверить так:
brctl show
И теперь можно перезапускать машину.
Только 10 раз подумайте, сможете ле Вы до нее добраться в случае, если что-то пошло не так и сеть отлетела!
Комментариев нет:
Отправить комментарий