LINUX.ORG.RU
решено ФорумAdmin

Не могу достучаться в Интернет через два OpenVPN-сервера

 , ,


0

1

Добра всем!

Дано: LAN дома - 172.16.0.0/12, первый OpenVPN-сервер с внешним IP-адресом х.х.х.х и приватной сетью 10.0.1.0/24 (10.0.1.1 - сервер), второй OpenVPN-сервер с внешним IP-адресом y.y.y.y и приватной сетью 10.0.2.0/24 (10.0.2.1 - сервер).

Как это всё должно работать: дома, на gw 172.16.0.1, трафик с некоторых адресов домашней сети маркируется с помощью iptables и через ip rule двигается на кастомную таблицу маршрутизации которая гоняет трафик до первого OpenVPN-сервера. На первом OpenVPN-сервере весь трафик с интерфейса tun0 (дом-сервер1) так же маркируется через iptables и так же с помощью ip rule идёт на кастомную таблицу, через которую маршрутизируется на второй сервер через интерфейс tun2. На втором OpenVPN-сервере этот самый трафик должен выходить в Интернет.

Проблема: Трафик в Интернет не идёт, хотя пинги в приватных сетях курсируют спокойно. А при попытке пропинговать 8.8.8.8 или что-то ещё, получаем только один доставленный пакет. Дальше - тишина. Через traceroute всё естественно ходит до пункта назначения, т.к он отправляет единственный пакет. А на клиентах дома ни веб, ни почта, ни прочее не работают вообще. Просто тайм-аут.

----- Домашний GW.

Правила домашнего gw:

32763:  from 10.0.1.2 lookup vpn_link 
32764:  from all fwmark 0x2 lookup vpn_link 
Маркировка трафика с некоторых адресов домашней локалки на домашнем gw:
-A PREROUTING -i eth2 -m iprange --src-range 172.16.0.2-172.16.0.254 -j MARK --set-mark 0x2
Кастомная таблица маршрутизации на домашнем gw:
default via 10.0.1.1 dev tun0 
10.0.1.0/24 via 10.0.1.2 dev tun0 
10.0.2.0/24 via 10.0.1.1 dev tun0 
x.x.x.x dev ppp0 scope link 
172.16.0.0/12 via 172.16.0.1 dev eth2

----- Первый сервер.

Правила на первом OpenVPN-сервере:

32765:  from all fwmark 0x2 lookup de-out_link
Маркировка трафика с tun0:
-A PREROUTING -i tun0 -j MARK --set-mark 0x2
Кастомная таблица маршрутизации на первом OpenVPN-сервере:
default via 10.0.2.1 dev tun2 
10.0.2.0/24 via 10.0.2.2 dev tun2 
172.16.0.0/12 via 10.0.1.2 dev tun0 

----- Второй сервер.

На втором серере трафик c первого OpenVPN-сервера с помощью SNAT должен уходить в Интернет:

-A POSTROUTING -s 10.0.1.0/24 ! -o tun0 -j SNAT --to-source y.y.y.y

Что с сервера 1, что с сервера 2, что из дома, спокойно пингуются любые адреса из приватных сетей:

172.16.0.0/12
10.0.1.0/24
10.0.2.0/24

Если на втором сервере повесить tcpdump, а из домашней сети пропинговать 8.8.8.8, то высветится только один пакет. Если повесить tcpdump на первом сервере, то пакеты будут сыпаться только в одну сторону, кроме первого. Если на первом сервере убрать маркировку трафика, а просто SNATить трафик на внешний адрес первого сервера, то всё идеально работает. Значит, затык где-то между первым и вторым сервером.Но не могу понять где.

Traceroute из дома:

1  gw01.priv (172.16.0.1)  0.355 ms  0.259 ms  0.216 ms
 2  10.0.1.1 (10.0.1.1)  86.474 ms  86.448 ms  86.409 ms
 3  10.0.2.1 (10.0.2.1)  106.851 ms  106.802 ms  106.761 ms
 4  51.68.172.1 (51.68.172.1)  106.942 ms  106.945 ms  107.614 ms
 5  192.168.250.254 (192.168.250.254)  107.580 ms  107.598 ms  107.561 ms
 6  10.13.91.190 (10.13.91.190)  107.522 ms  107.260 ms  107.210 ms
 7  10.13.88.84 (10.13.88.84)  107.170 ms 10.13.88.82 (10.13.88.82)  99.872 ms  101.200 ms
 8  10.17.241.86 (10.17.241.86)  101.969 ms 10.17.241.82 (10.17.241.82)  108.146 ms 10.17.241.86 (10.17.241.86)  108.128 ms
 9  10.73.40.26 (10.73.40.26)  107.090 ms 10.73.40.44 (10.73.40.44)  107.543 ms 10.73.40.48 (10.73.40.48)  107.838 ms
10  10.73.249.68 (10.73.249.68)  107.770 ms 10.73.249.66 (10.73.249.66)  107.634 ms  108.246 ms
11  fra-5-a9.de.eu (94.23.122.246)  110.646 ms be100-1228.fra-1-a9.de.eu (91.121.215.116)  110.595 ms  110.508 ms
12  be101.sbg-g1-nc5.fr.eu (94.23.122.136)  111.511 ms *  103.443 ms
13  108.170.252.1 (108.170.252.1)  102.321 ms be100-1254.th2-1-a9.fr.eu (94.23.122.139)  112.881 ms 108.170.251.193 (108.170.251.193)  103.016 ms
14  * * *
15  108.170.244.161 (108.170.244.161)  113.833 ms  113.846 ms  113.810 ms
16  209.85.249.185 (209.85.249.185)  113.844 ms google-public-dns-a.google.com (8.8.8.8)  103.301 ms 209.85.254.113 (209.85.254.113)  113.630 ms

UPD:

Запуская одновременно на двух серверах tcpdump dst 8.8.8.8 и пингуя из дома этот самый адрес можно увидеть, что успешный пакет (он же первый) не отображается на первом сервере, а лишь на втором и имеет вид:

x.x.x.x > google-public-dns-a.google.com
Cо второго пакета и дальше пинг виден только через tcpdump на первом сервере и имеет вид:
10.0.1.2 > google-public-dns-a.google.com

Теперь я ещё больше запутался и не понимаю почему вдруг со второго пакета адрес источника поменялся... 10.0.1.2 - это адрес домашнего gw в сети первого сервера.

P.S Если неточен в терминологии, то не пинайте - я только ещё учусь.

Ответ на: комментарий от Mercurium

Решил сам.

Это замечательно, но было бы неплохо озвучить причины проблемы и методы их устранения. Чтобы другие пользователи, столкнувшись с похожей ситуацией, могли бы быстро в ней разобраться.

Serge10 ★★★★★ ()
Ответ на: комментарий от Serge10

Причину проблемы пока понять не могу, но помогло удаление маркировки с помощью iptables на первом сервере, и добавления правила вместо маркировки на том же первом сервере:

ip rule add from 10.0.1.0/24 table de-out_link

Mercurium ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.