Как заставить сервер OpenVPN пересылать пакеты tun0 в локальную сеть?

Как заставить сервер OpenVPN пересылать пакеты tun0 в локальную сеть?

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

В ходе устранения неполадок я узнал следующее.

  • REMOTEможно пинговать FREEBSDи даже подключаться к нему по SSH.
  • Захват пакетов, настроенный на FREEBSDпорте Ethernet , не захватывает пакеты с или на REMOTEIP-адрес 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хоста пересылается, но вы не видите никакого обратного трафика.

Связанный контент