KVM: весь сетевой трафик одному гостю (брандмауэр)
В настоящее время я использую сервер VMWare ESXi 5.5 для своей виртуализации. Настройка сети такая:
Брандмауэр PFSense является центром всего этого и связан с: сетью LAN (физический NIC 1, назначенный VMWare), сетью DMZ (нет физического NIC, назначенного VMWare) WAN (физический NIC 2, назначенный только брандмауэру VMWare)
Хост является членом сети LAN. В DMZ и сети LAN есть пара серверов, которые основаны на Linux, так что в целом ничего особенного.
В моем сценарии брандмауэр берет на себя весь трафик, и физический сетевой адаптер 2 доступен исключительно брандмауэру (а не хосту). Таким образом, брандмауэр может получить публичный IP-адрес, который назначен моим интернет-провайдером через DHCP (кабельный провайдер).
Наконец, теперь я могу с моего клиента, который входит в сеть LAN, конечно, получить доступ ко всем серверам, которые мне нужны и которые мне нужны, и которыми я управлял с помощью определенных правил брандмауэра в PFSense. Пока все хорошо.
Итак, мой вопрос сейчас заключается в том, как мне реализовать этот сценарий в KVM и сделать хост KVM (который, вероятно, будет сервером Ubuntu 13.10 или 14.04 или на основе Debian) сетевым "тупым" хостом и позволить брандмауэру стать ямой для всех сетевой трафик.
Я немного поэкспериментировал на своем ноутбуке с KVM и установкой гостя (на сервере Ubuntu 13.10), но у него был только один физический сетевой адаптер, и я не хотел тянуть интернет-кабель для этого теста.:)
Таким образом, вся помощь, предложения и идеи о том, как выполнить эту установку, с благодарностью. Если информации не хватает, пожалуйста, дайте мне знать, и я постараюсь соответствующим образом обновить этот пост, но я надеюсь, что общая идея о том, что я хочу сделать, стала ясной во время этого поста.
VJ
PS: Для лучшего понимания, вот изображение моей текущей настройки сети VMWare.
2 ответа
Просто. Давайте предположим:
WAN -> eth0
LAN -> eth1
Вам нужно создать мост (назовем его br_wan) с устройством eth0 и оставить его без настроенного IP-адреса на хосте (для хоста не будет установлен IP-адрес для br_wan).
Теперь создайте другой мост (назовем его br_lan) с устройством eth1 и позвольте хосту получать свой IP с этого моста через DHCP (при условии, что PFSense здесь является сервером dhcp).
Виртуальной машине PFSense вы передадите ей как br_wan, так и br_lan в качестве сетевых устройств (используйте virtio для лучшей производительности). PFSense скорее всего увидит их как eth0 и eth1.
Некоторые основы конфигурации не проверяли его, но все, что вам нужно сделать, это настроить правильную конфигурацию в /etc/network/interfaces, строки ниже взяты из моей памяти, не проверены, но должны быть почти правильными:
====== / etc / network / интерфейсы на хосте ======
auto br_wan
iface br_wan inet static
address 0.0.0.0
bridge_ports eth0
auto br_lan
iface br_lan inet dhcp
bridge_ports eth1
Насколько я понимаю, вам нужна почти такая же настройка, как и у меня, поэтому я постараюсь описать это:
Мой KVM-сервер с двумя сетевыми картами работает под управлением Ubuntu 13.10 Server с KVM+Libvirt. Один сетевой адаптер служит мостом в локальной сети, а другой - напрямую от интернет-провайдера к виртуальному брандмауэру (под управлением Vyatta).
Мой провайдер назначает IP-адреса с DHCP, привязанным к MAC-адресу. Виртуальный брандмауэр обрабатывает вызовы DHCP-клиента к провайдеру, поэтому IP-адрес назначается непосредственно ему. На сервере / хосте KVM мне пришлось установить статический локальный адрес на интернет-провайдере, обращенном к сетевой карте, чтобы он не мог выполнять клиентские вызовы DHCP (поскольку мой интернет-провайдер арендует только один IP)
Это /etc/network/interfaces на хосте (eth0 подключен к коммутатору локальной сети, eth1 напрямую к / от ISP):
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 10.0.0.2
netmask 255.255.255.0
gateway 10.0.0.1
network 10.0.0.0
broadcast 10.0.0.255
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
dns-nameservers 10.0.0.4
dns-search lan
auto eth1
iface eth1 inet static
address 10.0.99.1
netmask 255.255.255.252
Это конфигурация интерфейса для виртуальной машины:
<interface type='direct'>
<mac address='52:54:00:b6:58:85'/>
<source dev='eth1' mode='vepa'/>
<target dev='macvtap0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='bridge'>
<mac address='52:54:00:88:94:6e'/>
<source bridge='br0'/>
<target dev='vnet1'/>
<model type='virtio'/>
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
Конфигурация интерфейсов Vyatta выглядит следующим образом (eth1 идет к LAN/ мосту, а eth0 - это подключение к провайдеру от eth1 на хосте):
interfaces {
ethernet eth0 {
address dhcp
duplex auto
firewall {
in {
name wan2lan
}
local {
name wan2gw
}
}
hw-id 52:54:00:b6:58:85
smp_affinity auto
speed auto
}
ethernet eth1 {
address 10.0.0.1/24
duplex auto
hw-id 52:54:00:88:94:6e
smp_affinity auto
speed auto
}
loopback lo {
}
}
Таким образом я получаю адрес DHCP от своего провайдера напрямую к виртуальному брандмауэру, и маршрутизация на хосте проходит через виртуальный брандмауэр, как я хочу.
Надеюсь это поможет:-)