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