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

FreeBSD jail как шлюз

Я пытаюсь настроить тюрьму, которая будет служить шлюзом по умолчанию для некоторых моих внешних клиентов.

У меня есть тюрьма VIMAGE с выделенным IP-адресом в моей локальной сети, который я хочу использовать в качестве шлюза для своих клиентов. Причина, по которой я это делаю, если это важно, заключается в том, что я хочу запустить OpenVPN внутри этой тюрьмы, чтобы все мои клиенты, использующие IP-адрес тюрьмы в качестве шлюза, могли прозрачно проходить через VPN.

Когда я вхожу в тюрьму по ssh, все работает: я вижу Интернет, даже когда я включаю OpenVPN, он работает должным образом. Однако он не работает в качестве шлюза по умолчанию для моих клиентов: имена не разрешаются, «нет маршрута к хосту» и т. Д.

Когда я бегу tcpdump внутри тюрьмы я вижу следующее:

20:53:23.263597 IP 192.168.1.6.54460 > syd15s01-in-f78.1e100.net.https: UDP, length 109
20:53:23.263636 IP 192.168.1.6.54460 > syd15s01-in-f78.1e100.net.https: UDP, length 109

где 192.168.1.6 это IP-адрес клиента, поэтому я предполагаю, что клиент пытается выйти в Интернет через тюрьму, но ничего не возвращается. Я иногда вижу некоторых ICMP трафик тоже.

Мой ipfw конфигурация:

# less /usr/local/etc/ipfw.rules
#!/bin/sh

EPAIR=$(/sbin/ifconfig -l | tr " " "\n" | /usr/bin/grep epair)
INNER="$(/sbin/ifconfig | grep " -->" | cut -d' ' -f2 | cut -d'.' -f1-3).0/24"
ipfw -q -f flush
ipfw -q nat 1 config if ${EPAIR}
ipfw -q add nat 1 all from ${INNER} to any via ${EPAIR}
ipfw -q add nat 1 all from any to any in via ${EPAIR}
# ipfw add check-state

TUN=$(/sbin/ifconfig -l | tr " " "\n" | /usr/bin/grep tun)
ifconfig ${TUN} name tun0

Я предполагаю, что где-то отсутствует NAT, но я действительно не понимаю, что происходит, поэтому любая помощь приветствуется.

Что мне делать, чтобы разрешить трафику моих клиентов проходить через jail / vpn, когда они используют IP-адрес jail в качестве шлюза по умолчанию?

Тюрьмы FreeBSD в основном представляют собой своего рода облегченную виртуализацию, поэтому ее лучшая цель - запускать некоторые приложения как контейнеры. Конечно, у него есть сетевой стек, но, сравнивая его функциональность с функциональностью хост-системы, я бы сказал, что он довольно ограничен.

Поэтому выбор тюрьмы в качестве маршрутизатора контейнера кажется плохим выбором. Что вам следует сделать - это использовать несколько FIB. Кстати, такой же подход применим ко всем современным сетевым ОС - Linux, JunOS, Cisco IOS и т. Д.

Я бы рекомендовал добавить net.fibs="4" в /boot/loader.conf, затем перезагрузитесь и используйте несколько таблиц маршрутизации. Таким образом, вы можете запустить свой шлюз OpenVPN в отдельном FIB, например setfib 1 /usr/local/bin ... whatever, затем назначьте ему трафик своих клиентов, используя setfib в ipfw или путем прямого назначения клиентских интерфейсов этому FIB.