Маршрутизация OpenVPN от сервера к клиенту

Маршрутизация OpenVPN от сервера к клиенту

У меня есть два удаленных места, каждое с публичным IP, и я хочу сделать локальную сеть этих мест, как если бы они были одним целым. То есть, машины в месте A могут общаться с машинами в месте B, а те, что в месте B, — с теми, что в месте A.

В Place A (10.0.2.1) у меня есть ASUS AC 1200g+ и Raspberry pi (10.0.2.60) с OpenVPN Server. Новые клиенты остаются в интерфейсе tun0 (10.8.0.1). В этот момент Клиент (Place B) может взаимодействовать с локальной сетью Place A, только трафик с назначением 10.0.1.0/24 перенаправляется на серверную сторону.

Теперь я хочу, чтобы машины в месте A (сервер) могли взаимодействовать с локальной сетью места B. Я размещаю маршрут в своем маршрутизаторе, который перенаправляет все запросы назначения с 10.0.1.0/24 на VPN-сервер Raspberry Pi, но сервер не знает, что делать с этим трафиком.

В месте B (10.0.1.1) у меня есть ASUS AC86U с прошивкой ASUS Merlin, и я активирую клиент OpenVPN с включенной опцией «Входящий брандмауэр».

Сетевая схема

решение1

У меня похожая установка, в которой Raspberry Pi является клиентом, но это не должно иметь большого значения. Отказ от ответственности: это не самая простая вещь в настройке.

Я использую этот /etc/iptables/iptables.rulesфайл для трансляции сетевых адресов (NAT) трафика из подключений OpenVPN (обычно tun0, но tun+охватывает все) в локальные сети:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth+ -o tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth+ -j ACCEPT
COMMIT

Для конфигурации OpenVPN требуется так называемыйконфигурация клиент-клиент. Эти две строки в OpenVPN-config сервера включают эту функцию:

# use ccd-folder (per host configs)
client-to-client
# routing to office lan:
client-config-dir ccd

Необходимо client-config-dirвручную создать под -path, /etc/openvpn/...где находится ваша конфигурация. В этой папке вы можете затем создать текстовые файлы для каждого хоста. Наименование файла важно: дважды проверьте, как OpenVPN вызывает вашего клиента в системном журнале (например, с помощью journalctl -xef --unit openvpn-server@somehostили в openvpn-status.txtфайле). Содержимое файла простое:

ifconfig-push 10.10.99.18 255.255.255.255
iroute 192.168.0.0 255.255.0.0

настроит его на получение того же IP-адреса каждый раз при подключении ( 10.10.99.18) и настроит VPN-сервер на внутреннюю маршрутизацию трафика для 192.168.0.0/16клиента с именем этого файла и IP-адресом. Это делает понятным, почему у нас пока нет действительного сетевого подключения: То есть, потому что хост-система VPN-сервера не знает, что VPN-туннель может использоваться для маршрутизации трафика для этой сети ( netstat -rn4). Поэтому нам нужно снова настроить VPN-сервер и добавить:

route       192.168.0.0 255.255.0.0
push "route 192.168.0.0 255.255.0.0"

чтобы сообщить серверу, что он должен направлять трафик, 192.168.0.0/16и все клиенты, подключенные к серверу, также должны быть проинформированы о маршруте - маршрут передается клиентам.


Для своей настройки я использовал ссылку выше, но во время написания этого ответа я нашел две интересные ссылки по этой теме:

удачи :)

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