Назад | Перейти на главную страницу

OpenBSD: шлюз за пределами подсети (работает в Linux)

Нам нужно настроить хост OpenBSD для использования шлюза по умолчанию, находящегося за пределами его подсети. Это все, что мне нужно сделать в Linux (а не фактические IP-адреса) для этого:

ifconfig eth0 33.33.33.33/31 up
route add 33.33.33.254 dev eth0
route add default gw 33.33.33.254

Проблема в том, что мы не знаем надлежащего эквивалента средней команды в OpenBSD. На странице руководства говорится:

Если пункт назначения напрямую доступен через интерфейс, для которого не требуется промежуточная система в качестве шлюза, следует указать модификатор -iface;

К сожалению, мы не можем понять, как заставить это работать. Это виртуальный хост на сервере OVH, у них есть документация для многих других операционных систем, показывающая, как это сделать здесь: http://help.ovh.co.uk/BridgeClient

Это старая ветка, но вот она.

Так случилось, что я запустил несколько виртуальных машин OpenBSD на ESXi 6.0, работающей в SoYouStart, дочерней компании OVH. Настройка сети такая же, как и в случае с OVH, и я думаю, что, хотя и странно, его основная цель - максимально устранить трафик ARP путем искусственного ограничения широковещательных доменов и, например, без необходимости использования VLAN.

В моем случае я запросил у OVH дополнительные IP-адреса, и они поступают из совершенно другого диапазона. Для обсуждения здесь предположим, что это мои настройки:

  • мой основной IP-адрес (который использует хост ESXi): 213.0.113.78/32
  • дополнительный диапазон IP-адресов для гостевых виртуальных машин: 192.0.2.64/30
  • шлюз по умолчанию для ВСЕГО вышеперечисленного: 213.0.113.254
  • обратите внимание - все хосты должны использовать сетевую маску хоста (255.255.255.255) из-за способа настройки сети OVH

Чтобы настроить маршрутизацию на хосте OpenBSD, мне нужно сделать следующее:

ifconfig vmx0 inet 192.0.2.64 255.255.255.255 
route add -inet 213.0.113.254 -llinfo -link -static -iface vmx0 
route add -inet default 213.0.113.254

Чтобы все это было сделано в начале, я игнорирую /etc/mygate файл и поместите следующее в /etc/hostname.vmx0:

inet 192.0.2.64 255.255.255.255
!sleep 2
!route add -inet 213.0.113.254 -llinfo -link -static -iface vmx0
!route add -inet default 213.0.113.254

Вы заметите sleep команда - по какой-то причине это требуется в OpenBSD 5.9, но не было раньше. Без sleep, первый из route Команды не будут выполняться, и поэтому ваша маршрутизация не будет настроена правильно.

Это работает с использованием следующего трюка:

  • настраиваем IP адрес на интерфейсе
  • с первым route командой переводим IP-адрес шлюза (213.0.113.254) в адрес ссылки (MAC-адрес); это делается -llinfo вариант;
  • В то же самое route команду, используя -link вариант, мы устанавливаем адрес ссылки на таблицу маршрутизации и с помощью -iface vmx0 мы сообщаем ядру, через какой сетевой интерфейс доступен этот адрес ссылки; то -static переключатель отмечает его как введенную вручную запись в таблицу маршрутизации
  • второй route команда теперь может быть успешной, так как маршрут к шлюзу по умолчанию теперь известен

Одна вещь, с которой я столкнулся в приведенной выше настройке, для которой у меня пока нет решения, - это то, что один из четырех хостов OpenBSD, настроенных точно таким же образом, работает с той же версией ОС и точно такой же сборкой ядра, и даже запуск на том же хосте VMware каждые 24 часа или около того, кажется, "теряет" этот волшебный маршрут из своей таблицы маршрутизации ...

У меня была та же проблема, что и у Майка, и мне было трудно получить OpenBSD для правильной маршрутизации назначенного IP-адреса. Как и в случае с OVH, выделенные серверы на myLoc.de предоставляют IP-адреса с сетевой маской 255.255.255.255, которые необходимо маршрутизировать «точка-точка» внутри виртуальной машины. Я уже сталкивался с этим в других гостевых ОС. В Debian 10 я бы настроил внешний IP-адрес в гостевой системе следующим образом:

# nano /etc/network/interfaces

iface eth0 inet static
        address 56.78.91.56/32    ## this is the additional external IP
        pointopoint 99.78.91.101  ## this is the gateway for the additional IP (which in my case is also the main IP of the server)
        gateway 99.78.91.101

... и в Ubuntu 18.04 с использованием netplan соответствующая часть будет выглядеть так, которая работает с использованием on-link:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0: #Interface-Name
      addresses:
        - 56.78.91.56/32 ## additional external IP
      routes:
      - to: 0.0.0.0/0
        via: 99.78.91.101 ## gateway for the additional IP
        on-link: true

Настраивая это с помощью ip команда с помощью onlinkвариант я бы сделал следующее:

ip addr add 56.78.91.56/32 dev eth0
ip route add default via 99.78.91.101 dev eth0 onlink

Каким-то образом route команда задокументирована в OpenBSD и FreeBSD не очень ясно давала понять, как я могу сделать то же самое в BSD, и почти не было примеров, которые можно было бы найти с помощью веб-поиска. Возможно, для тех, кто более знаком с сетями, ответ очевиден. Я наконец заставил его работать как раз перед тем, как я нашел более полный ответ Майка в отдельной статье, которую он опубликовал. Поэтому я дополню его ответ конфигурацией, которая действительно работает в OpenBSD 6.6 (eth0 - это просто заполнитель для фактического имени интерфейса):

ifconfig eth0 -inet 56.78.91.56/32
route -v add -inet 99.78.91.101/32 -link -iface eth0
route -v add -inet default 99.78.91.101

Эти команды создают таблицу маршрутизации с соответствующими строками, например:

route -n show -inet

Routing tables - Internet:
Destination     Gateway            Flags  Refs    Use   Mtu  Prio Iface
default         99.78.91.101       UGS       5     52     -     8  eth0
99.78.91.101    cc:aa:d2:4f:08:8f  UHLSh     1     30     -     8  eth0 # MAC address on the server
56.78.91.56     7a:33:f7:42:44:7e  UHLl      0     26     -     1  eth0 # MAC address of the VM
56.78.91.56/32  56.78.91.56        UCn       0      0     -     4  eth0

Чтобы навсегда сохранить конфигурацию OpenBSD 6.6 в папке /etc/hostname.eth0 файл используйте следующий. (Очевидно, для выполнения всех команд требуется 2-секундная задержка.)

inet 56.78.91.56/32
!sleep 2
!route -v add -inet 99.78.91.101/32 -link -iface eth0
!route -v add -inet default 99.78.91.101

В настоящее время это работает на сервере Proxmox 6 с OpenBSD в качестве гостя, работающего в KVM. Внешний IP-адрес привязан к виртуальному мосту на сервере. Я не знаю, есть ли у многих серверных компаний dedi такие настроенные сети, что затрудняет настройку, но я столкнулся с этим на Webtropia, Servdiscount (оба подключены к myLoc) и видел похожие вопросы на Hetzner.

Попробуйте вместо этого настроить псевдоним в интерфейсе:

ifconfig eth0 alias 33.33.33.254

OpenBSD, вероятно, будет иметь другое имя интерфейса, чем eth0, в зависимости от используемого драйвера.