
У меня есть три машины, которые я пытаюсь координировать через TUN-соединение.
FREEBSD
коробка, на которой запущен сервер OpenVPN (tun)
10.0.200.21/24 в локальной подсети
10.0.202.1/24 в VPN
REMOTE
Публичный IP
10.0.202.6/24 на VPN
WEBSERVER
10.0.200.31/24 в локальной подсети
Я могу подключиться REMOTE
к VPN FREEBSD
через OpenVPN, и соединение нормальное, но оно настроено неправильно. Когда я пытаюсь подключиться к REMOTE
через WEBSERVER
ввод WEBSERVER
ip-адреса в REMOTE
браузере, WEBSERVER
он недоступен. Он доступен, если я подключаюсь REMOTE
к локальной подсети напрямую.
В ходе устранения неполадок я узнал следующее.
REMOTE
можно пинговатьFREEBSD
и даже подключаться к нему по SSH.- Захват пакетов, настроенный на
FREEBSD
порте Ethernet , не захватывает пакеты с или наREMOTE
IP-адрес VPN 10.0.202.6 . Поэтому пакеты REMOTE не попадают в локальную подсеть. - Theopenvpn.logфайл
FREEBSD
содержит следующую строку:GET INST BY VIRT: 10.0.200.31 [failed]
Таким образом, похоже, что OpenVPN не пересылает пакеты, полученные на устройстве TUN, на FREEBSD
адаптер Ethernet и в локальную подсеть.
У меня в файле server.conf есть следующая строка.
push "route 10.0.200.0 255.255.255.0"
Я попробовал добавить эту строку, но это не помогло.
route 10.0.200.0 255.255.255.0
Вот таблица маршрутизации наFREEBSD
Таблицы маршрутизации Интернет: Назначение Шлюз Флаги Ссылки Использование Netif Истекает по умолчанию 10.0.200.1 UGS 0 4306 re0 10.0.200.0 ссылка#9 U 0 61582 re0 10.0.200.21 ссылка#9 UHS 0 41 lo0 10.0.201.0 10.0.200.1 UGS 0 0 re0 10.0.202.0 10.0.202.2 UGS 0 0 tun0 10.0.202.1 ссылка № 12 UHS 0 0 lo0 10.0.202.2 ссылка#12 UH 0 0 tun0 ссылка localhost#11 UH 0 193743 lo0
Я прочитал в интернете об этом GET INST BY VIRT: 10.0.200.31 [failed]
сообщении, и для машин Linux было рекомендовано запустить следующую команду.
echo 1 > /proc/sys/net/ipv4/ip_forward
Я боюсь запускать ее, потому что я ее не понимаю и не хочу попасть FREEBSD
в странную конфигурацию. Я также настоятельно предпочитаю решение, которое изменяет файл server.conf для автоматического создания необходимой конфигурации, чтобы он правильно управлялся и сносился при закрытии OpenVPN.
Каково решение этой проблемы?
решение1
Нашел проблему. Оказывается, FreeNAS, программное обеспечение NAS-устройства на основе FreeBSD, о котором я говорю выше FREEBSD
, имеет net.inet.ip.forwarding
значение 0. Это можно увидеть с помощью команды sysctl -a | grep net.inet.ip.forwarding
. Чтобы заставить пакеты пересылаться, мне пришлось сделать sysctl net.inet.ip.forwarding=1
.
Это изменение не сохраняется после перезагрузки. Я думаю, что мне, возможно, придется использовать файл /etc/rc.conf и set gateway_enable="YES"
, но пока я обнаружил, что эта настройка не обрабатывается до перезагрузки, и, к сожалению, на FreeNAS rc.conf, похоже, перезаписывается при каждой перезагрузке. Возможно, эту переменную можно записать в /etc/defaults/rc.conf, который должен хранить значения по умолчанию для системы и перезаписывается пользовательскими конфигурациями в rc.conf, но в файле /etc/defaults/rc.conf вверху есть предупреждение не редактировать его.
Итак, эта проблема не решена полностью, но, по крайней мере, я выяснил, в чем, по-видимому, заключаются проблемы. Теперь, когда я это понял, я заметил проблему со входом в https веб-приложения управления в локальной подсети. Это будет еще одна проблема, которую нужно решить.
решение2
Хорошо, ваш VPN-клиент имеет маршрут, чтобы добраться до сети 10.0.200.0/24
, и ваш VPN-сервер имеет маршрут. Но вопрос в том, есть ли у вашего веб-сервера 10.0.200.31
маршрут, чтобы добраться до 10.0.202.0/24
сети?
Сделайте tcpdump на коробке freebsd. Я подозреваю, что вы увидите, что трафик с вашего 10.0.202.6
хоста пересылается, но вы не видите никакого обратного трафика.