1

Настройка

У меня есть следующая топология:

              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 идентичны, за исключением того, что сетевые адреса различаются.

0