Proxmox с OPNsense в качестве межсетевого экрана / GW - проблема с маршрутизацией

Эта настройка должна быть основана на proxmox, находящемся за виртуальной машиной opnsense, размещенной на самом Proxmox, которая будет защищать proxmox, предлагать брандмауэр, частную локальную сеть и DHCP / DNS для виртуальных машин и предлагать подключение IPsec к локальной сети для доступа ко всем виртуальным машинам. / Proxmox без NAT. Сервер является типичным сервером Hetzner, поэтому только на сетевом адаптере, но с несколькими IP-адресами или / подсетями на этом сетевом адаптере.

Из-за блокировщика кластеров с настройкой PCI-passthrough это моя альтернатива

  1. Сервер Proxmox с 1 сетевой картой (eth0)
  2. 3 общедоступных IP-адреса, IP2 / 3 маршрутизируются по MAC-адресу в центре обработки данных (на eth0)
  3. Настройка моста KVM (eth0 без IP, vmbr0 подключен к eth0 с IP1)
  4. Частная локальная сеть на vmbr30, 10.1.7.0/24
  5. Shorewall на сервере proxmox

Чтобы лучше описать настройку, я создаю этот рисунок: (не уверен, что он идеальный, скажите, что нужно улучшить)

введите здесь описание изображения

Текстовое описание:

Сетевые интерфейсы на Proxmox

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
    pre-up sleep 2

auto vmbr0
# docs at  
iface vmbr0 inet static
    address  External-IP1(148.x.y.a)
    netmask  255.255.255.192

    # Our gateway is reachable via Point-to-Point tunneling
    # put the Hetzner gateway IP address here twice
    gateway  DATACENTER-GW1
    pointopoint DATACENTER-GW1

    # Virtual bridge settings
    # this one is bridging physical eth0 interface
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    pre-up sleep 2
    bridge_maxwait 0
    metric 1

    # Add routing for up to 4 dedicated IP's we get from Hetzner
    # You need to

    # opnsense
    up route add -host External-IP2(148.x.y.b)/32 dev vmbr0
    # rancher
    up route add -host External-IP2(148.x.y.c)/32 dev vmbr0

    # Assure local routing of private IPv4 IP's from our
    # Proxmox host via our firewall's WAN port
    up ip route add 10.1.7.0/24 via External-IP2(148.x.y.b) dev vmbr0

auto vmbr30
iface vmbr30 inet static
    address  10.1.7.2
    netmask  255.255.255.0
    bridge_ports none
    bridge_stp off
    bridge_fd 0
    pre-up sleep 2
    metric 1

Shorewall на Proxmox

интерфейсы

wan     eth0            detect          dhcp,tcpflags,nosmurfs
wan     vmbr0           detect          bridge
lan     vmbr30          detect          bridge

политики:

lan             lan             ACCEPT          -               -
fw              all             ACCEPT          -               -
all             all             REJECT          INFO               -

OPNsense

  1. WAN - ExternalIP2, подключенный к vmbr0 с MAC-XX
  2. LAN - 10.1.7.1, привязанный к vmbr30

Что работает:

  • Базовая настройка работает нормально, я могу получить доступ к opnsense с IP2, я могу получить доступ к proxmox по IP1 и я могу получить доступ к rancher-VM по ip3 - это то, что не требует никакой маршрутизации.
  • Я могу подключиться с помощью мобильного клиента IPSec к OPNsense, предлагая доступ к локальной сети (10.1.7.0/24) из диапазона виртуальных IP-адресов 172.16.0.0/24
  • я могу получить доступ к 10.1.7.1 (опция) при подключении к OpenVPN
  • я могу получить доступ к 10.1.7.11 / 10.1.7.151 из OPNsense (10.1.7.1) (оболочка)
  • я могу получить доступ к 10.1.7.11 / 10.1.7.1 из othervm (10.1.7.151) (оболочка)

Что не работает:

а) подключение к 10.1.7.11/10.1.7.151 или 10.1.7.2 от клиента IPsec

б) [РЕШЕНО в ОБНОВЛЕНИИ 1] подключение к 10.1.7.2 из 10.1.7.1 (опционально)

c) Кажется, у меня асинхронная маршрутизация, и пока я могу получить доступ, например, 10.1.7.1:8443 я вижу много записей если

в) норма

г) Совместное использование IPSec LAN будет включать правило i в цепочку IPSEC, «from * to LAN ACCEPT» - но это не сработало для меня, мне пришлось добавить «from * to * ACCEPT»  введите описание изображения здесь


Вопросов:

I) Конечно, я хочу исправить a) b) c) d), вероятно, начиная с понимания c) и d)

II) поможет ли в этой настройке добавить вторую сетевую карту?

III) может быть проблема в том, что я активировал net.ipv4.ip_forward на хосте proxmox (лучше не маршрутизировать?)

Когда я разобрался с этим, я хотел бы разместить исчерпывающее руководство о том, как запустить OPNsense в качестве устройства с частной сетью на Proxmox, передать некоторые службы внешнему миру с помощью HAproxe + LE, а также получить доступ к частной локальной сети с помощью IPsec.

ОБНОВЛЕНИЕ1:

Удаление up ip route add 10.1.7.0/24 via IP2 dev vmbr0 из vmbr0 на proxmox устранило проблему, из-за которой ни proxmox не мог получить доступ к 10.1.7.0/24, ни получить доступ из локальной сети.

ОБНОВЛЕНИЕ2:

Я создал обновленную / измененную настройку, в которой используется pci-passthrough. Цели те же - это снижает сложность - см. здесь


person Eugen Mayer    schedule 22.05.2017    source источник


Ответы (1)


Некоторым в первую очередь нужны грубые основы:

  • Есть маршрутизация, то есть IP-адреса и пакеты на уровне 3.
  • Есть коммутация, то есть MAC-адреса и кадры на уровне 2.

Далее вы говорите о vmbr0 / 1/30, но в вашей конфигурации отображаются только 0 и 30. Shorewall не имеет значения для вашего подключения к виртуальной машине (iptables - это layer3, ebtables будет Layer2 для контраста, но ваши кадры должны просто летать мимо shorewall, не доходя до HV, а вместо этого переходя непосредственно к виртуальной машине. Shorewall - это просто интерфейс, использующий iptables на заднем фоне).

С этим в стороне:

Обычно маршрутизация на МОСТах proxmox не требуется. Для вас мост - это переключатель. vmbr0 - это виртуальный внешний мост, который вы связали с eth0 (таким образом, создавая внутреннюю связь между физическим ником и вашим виртуальным интерфейсом, чтобы пакеты вообще передавались). Мост также может работать без привязанного к нему IP-адреса. Но для того, чтобы HV был доступен, обычно к нему подключается внешний IP-адрес. В противном случае вам придется настроить шлюз брандмауэра плюс VPN-туннель, дать vmbr30 внутренний IP-адрес, а затем вы сможете получить доступ к внутреннему IP-адресу HV из Интернета после установления туннельного соединения, но пока это только для целей иллюстрации.

Проблема с подключением к ipsec ужасно похожа на неправильно настроенный VPN, но также мобильный IPSEC часто является проблемой для работы из-за различий в реализации протоколов, openvpn работает НАМНОГО лучше, но вы должны знать свои основы PKI и сертификатов. чтобы реализовать это. Плюс, если opnsense так же нелогичен, как pfsense, когда дело доходит до openvpns, вы, возможно, в течение недели легко столкнетесь с темнотой. Для pfsense есть устанавливаемый пакет экспорта конфигурации openvpn, который значительно упрощает жизнь, не знаю, доступен ли он и для opnsense.

Это не столько похоже на то, что вы называете асинхронной маршрутизацией, сколько на проблему с брандмауэром, которая у вас возникла в отношении первого изображения. Для вашего туннельного брандмауэра (интерфейс IPSEC или интерфейс openvpn на opnsense, в зависимости от туннеля, который вы используете) просто оставьте его на ipv4 any: any to any: any, вы должны попасть в сеть LAN в любом случае только по определению туннеля. Сам по себе opnsense будет автоматически отправлять пакеты только через интерфейс LAN, как показано на втором рисунке.

net.ipv4.ip_forward = 1 = включить маршрутизацию в ядре на всех интерфейсах ОС Linux, где вы ее активировали. Вы можете выполнять NAT-ting через iptables, тем самым делая возможным проникновение в вашу локальную сеть, теоретически используя внешний IP-адрес HV на vmbr0, но это не то, чего вы должны достичь случайно, вы можете снова отключить пересылку без потери связи. По крайней мере, для HV, я не уверен, есть ли у вас дополнительные маршруты для других внешних IP-адресов, но они должны быть настроены таким же образом изнутри opnsense напрямую (создайте там двухточечные ссылки, кадры будут прозрачно проходить через vmbr0 и eth0 на шлюз hetzner) и работать, что бы чище.

Кроме того, вам не следует делать виртуальную машину ранчера доступной извне напрямую и, таким образом, в обход вашего брандмауэра, я сомневаюсь, что это то, чего вы хотите достичь. Вместо этого поместите внешний IP-адрес в opnsense (как виртуальный IP-адрес типа ip alias), настройте NAT 1: 1 с IP3 на внутренний IP-адрес rancher-vm и выполните межсетевой экран через opnsense.

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

[hetzner gw]
  |
  |
  |
[eth0] (everything below happens inside your server)
  ||
  || (double lines here to hint at the physical-virtual linking linux does)
  || (which is achieved by linking eth0 to vmbr0)
  ||
  || +-- HV acess to via IP1 -- shorewall/iptables for hv firewalling 
  || |
[vmbr0]                                                    [vmbr30]
 IP1                                                        | | |
  |                                                         | | |
  |                                                         | | |
[wan nic opn]                                               | | | 
  IP2 on wan directly,                                      | | |
  IP3 as virtual IP of type ip alias                        | | |
  x                                                         | | |
  x (here opn does routing/NAT/tunnel things)               | | |
  x                                                         | | |
  x set up 1:1 NAT IP3-to-10.1.7.11 in opn for full access  | | |
  x set up single port forwardings for the 2nd vm if needed | | |
  x                                                         | | |
[lan nic opn]-----------------------------------------------+ | |
 10.1.7.1                                                     | |
                                                              | |
                                                   +----------+ |
                                                   |            |
                                              [vm1 eth0]   [vm2 eth0]
                                               10.1.7.11    10.1.7.151

Если вы также хотите настроить брандмауэр HV через opnsense, следующие шаги должны быть выполнены при сохранении возможности подключения:

  1. удалить IP1 из [vmbr0]
  2. надень это [wan nic opn]
  3. поместите внутренний IP (IP_INT) из opn lan на [vmbr30]
  4. настроить NAT 1: 1 с IP
  5. установить все правила брандмауэра
  6. ругаться как черт, когда вы ломаете брандмауэр и больше не можете добраться до hv
  7. посмотрите, можете ли вы получить доступ к HV через решение iKVM, надеясь получить на него общедоступный IP-адрес, поэтому вы можете использовать окно консоли в proxmox, надеясь исправить или переустановить брандмауэр.
person sjas    schedule 23.05.2017
comment
Вот это да. Я все это проработаю! для vmbr0 / размещения HV позади FW я в настоящее время решил, что лучше полностью выполнить сквозную передачу PCI и обрабатывать что-либо в OPNsense. Я бы сказал, что это имеет еще больший смысл в этом отношении - как вы думаете - у меня есть LARA / последовательная консоль для сервера? Я уже проработал / проработал вариант 1: 1, спасибо. И действительно спасибо, что разбили мне голову о маршрутизации / коммутации. Я вернусь к нему сразу после того, как поработаю с ним - потребуется время, чтобы обработать. По крайней мере, я получил отрицательный голос без объяснения причин, это в целом полезно :) - person Eugen Mayer; 23.05.2017
comment
Сквозной проход pci не требуется, мост позаботится о прохождении ваших пакетов и просто использует iptables на HV. Все остальное означает просто ненужную боль где-то по пути. - person sjas; 23.05.2017
comment
Также разберитесь, как все работает с коммутацией / маршрутизацией. Шлюз нужен только для пакетов, которые необходимо маршрутизировать, поскольку им нужно выйти из широковещательного домена (это переключаемая вещь). Узнайте, что делает ARP. Локально используйте wirehark. По-настоящему изучите модель OSI, последний совет, не связанный со всем остальным: TCP / UDP = Segments / Datagrams = Ports = layer4 - person sjas; 23.05.2017
comment
Прохождение PIC в этом отношении было связано с ухудшением производительности virtio NIC в поле opnsense, которое я хотел бы обойти. Но я понял, что установка моста так, как вы сказали, решает и эту проблему, но не проблему производительности (которая, конечно, не является нашей темой). Пройдемся по модели OSI и обновим ее, сосредоточимся на коммутации / маршрутизации. Еще раз спасибо уже! - person Eugen Mayer; 23.05.2017
comment
doc.pfsense.org/index.php/VirtIO_Driver_Support / pve.proxmox.com/wiki/PfSense_Guest_Notes также может применяться здесь. Вы также можете использовать e1000 вместо вирусов. Вы действительно достигли пределов производительности? - person sjas; 23.05.2017
comment
да, это хорошо известно - большинство документов, на которые вы ссылаетесь, устарели, основаны на FreeBSD10, 11.1 намного лучше и встроена в поддержку virtio, но далека от собственной скорости. Самая большая проблема - это разгрузка контрольной суммы, которую необходимо отключить, если вы используете virtio, что создает небольшую нагрузку. На самом деле вы также отключаете tx на vmbr0, это не часть прошлого, но это понадобится - person Eugen Mayer; 23.05.2017
comment
Кажется, ты знаешь больше, чем я. - person sjas; 23.05.2017
comment
вы не возражаете, чтобы я изменил начальный вопрос с помощью pci-passthrough? Я уже устранил некоторые проблемы, убрал косяк из эквазии и в целом упростил многие вещи. По большей части ваш ответ остается верным, но он требует корректировок. Я мог бы создать новый вопрос, но я думаю, что это не имеет смысла, или, если вы так говорите, означает, что вы ожидаете, что вышеуказанная настройка будет работать без вашего предложения, мы можем оставить этот здесь и перейти к другой настройке, если вы буду - person Eugen Mayer; 23.05.2017
comment
Я пошел дальше после того, как понял, насколько этот вопрос изменится при написании статьи - я опубликовал stackoverflow.com/questions/44134651/ и пока не знаю, как мы обработать эту статью. Я действительно хотел бы исправить обоих. Я думаю, что если я сведу этот вопрос к базовой настройке без вопросов IPsec, ваш ответ будет идеальным, и все это будет очень ценно как вариант. Что вы думаете? - person Eugen Mayer; 23.05.2017
comment
Я в основном делал именно то, что предлагал sjas, и это действительно хорошо сработало. Одна вещь, которую я бы удалил из этого ответа, или, по крайней мере, с подсказкой об ошибке, это последняя часть с внешним IP. Если это будет сделано, вы больше не сможете использовать эту настройку в кластере, как и настройку pci-passthrough. Итак, пока у вас нет выделенного восходящего канала сетевой карты для синхронизации кластера, вам понадобится прямой шлюз в Интернет на proxmox hv. - person Eugen Mayer; 02.06.2017