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 от своего провайдера напрямую к виртуальному брандмауэру, и маршрутизация на хосте проходит через виртуальный брандмауэр, как я хочу.

Надеюсь это поможет:-)

Другие вопросы по тегам