У меня есть два удаленных места, каждое с публичным 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
и все клиенты, подключенные к серверу, также должны быть проинформированы о маршруте - маршрут передается клиентам.
Для своей настройки я использовал ссылку выше, но во время написания этого ответа я нашел две интересные ссылки по этой теме:
- https://community.openvpn.net/openvpn/wiki/RoutedLans
- https://forums.openvpn.net/viewtopic.php?t=26839
удачи :)