Настройка
У меня есть следующая топология:
Router
172.25.214.1
|
|
|
SiteB
172.25.214.0/24
|
|
|
LAN: 172.25.214.3
OpenVPN server+client B
TUN0: 172.25.215.1 TUN1: 10.1.2.2
| |
| |
| |
VpnSiteB VpnSiteA
172.25.215.0/24 10.1.2.0/24
| |
| |
| |
TUN1: 172.25.215.2 TUN0: 10.1.2.1
OpenVPN server+client A
LAN: 10.1.1.3
|
|
|
SiteA
10.1.1.0/24
|
|
|
Router
10.1.1.1
На каждом сайте сервер OpenVPN + клиент - это Raspberry Pi, на котором запущен один экземпляр сервера OpenVPN и один экземпляр клиента OpenVPN.
Таблица маршрутизации ядра на хосте OpenVPN SiteA:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.1.1.1 0.0.0.0 UG 0 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.1.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
172.25.214.0 172.25.215.1 255.255.255.0 UG 20 0 0 tun1
172.25.214.0 10.1.2.2 255.255.255.0 UG 30 0 0 tun0
172.25.215.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
и что хоста OpenVPN на SiteB:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.25.214.1 0.0.0.0 UG 0 0 0 eth0
10.1.1.0 10.1.2.1 255.255.255.0 UG 20 0 0 tun1
10.1.1.0 172.25.215.2 255.255.255.0 UG 30 0 0 tun0
10.1.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
172.25.214.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.25.215.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
Как видите, единственными сетями, которые имеют несколько маршрутов, являются SiteA и SiteB. Хосты OpenVPN предпочитают маршрутизировать на другой сайт через его интерфейс клиента / сеть OpenVPN.
Эта проблема
Большинство маршрутов работают нормально. Любой хост на сайте А может общаться в двух направлениях с
- Любой хост-интерфейс на SiteB
- Любой хост-интерфейс на VpnSiteA
- Любой хост-интерфейс на VpnSiteB, кроме TUN0 / 172.25.215.1
Т.е. хост на сайте А может пинговать
- 10.1.1.3
- 10.1.2.1
- 172.25.215.2
- 172.25.214.3
- 10.1.2.2
- Но не 172.25.215.1
Это то, что я хочу решить.
Устранение неисправностей я сделал
Тест 1
На хосте на SiteA я пингую 172.25.215.1 и проследил, что случилось с TCPDUMP
на обоих хостах OpenVPN.
- Эхо-запрос поступил на хост OpenVPN SiteA по интерфейсу локальной сети
- Эхо-запрос оставил хост OpenVPN SiteA на его интерфейсе TUN1
- Эхо-запрос поступил на хост SiteB OpenNPN через его интерфейс TUN0
- Эхо-ответ оставил хост OpenBPN SiteB на его интерфейсе TUN1
- Нет Эхо ответ не прибыл на OpenVPN хозяина SiteA на любом из его интерфейсов.
Так что здесь что-то идет не так.
Тест 2
Я отключил сервер OpenVPN на хосте OpenVPN SiteA и отключил клиент OpenVPN на хосте OpenVPN, если SiteB. Другими словами, теперь существует только один туннель. На этот раз мне удалось пропинговать 172.25.215.1 с хоста на SiteA.
Так что, когда у меня есть два туннеля, что-то идет не так.
Фон
Почему не только один туннель? Время от времени мой интернет-провайдер на обоих сайтах перестает назначать мне публичный IP-адрес, оставляя меня позади CGN. Если это происходит на сайте, на котором размещен сервер OpenVPN, связь между сайтами нарушается. Но если на обоих сайтах работает сервер OpenVPN, если один сайт отстает от CGN, проблем нет.
аппендикс
server.conf
хоста OpenVPN SiteA:
; General
; ---------------------------------------------------------
dev tun0
proto udp
port xxxx
client-config-dir /etc/openvpn/ccd
keepalive 10 120
max-clients 20
tls-server
verb 2
; Network
; ---------------------------------------------------------
topology subnet
client-to-client
server 10.1.2.0 255.255.255.0
route 172.25.214.0 255.255.255.0 10.1.2.2 30
client.conf
хоста OpenVPN SiteA:
; General
; ---------------------------------------------------------
client
dev tun1
proto udp
remote xxxx
resolv-retry infinite
connect-retry 5 1800
explicit-exit-notify
nobind
tls-client
verb 2
; Network
; ---------------------------------------------------------
script-security 2
up /etc/openvpn/uppe.sh
down /etc/openvpn/nere.sh
up-restart
up-delay
iproute /usr/local/sbin/unpriv-ip
Примечание: настройки безопасности удалены.
uppe.sh
:
#!/bin/bash
/usr/local/sbin/unpriv-ip route add 172.25.214.0/24 via 172.25.215.1 dev tun1 metric 20
exit 0
nere.sh
#!/bin/bash
/usr/local/sbin/unpriv-ip route del 172.25.214.0/24 via 172.25.215.1 dev tun1 metric 20
exit 0
Эти два относятся к смягчению CGN.
Файлы для хоста OpenVPN на SiteB идентичны, за исключением того, что сетевые адреса различаются.