Добра всем!
Дано: 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
-A PREROUTING -i eth2 -m iprange --src-range 172.16.0.2-172.16.0.254 -j MARK --set-mark 0x2
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
-A PREROUTING -i tun0 -j MARK --set-mark 0x2
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
10.0.1.2 > google-public-dns-a.google.com
Теперь я ещё больше запутался и не понимаю почему вдруг со второго пакета адрес источника поменялся... 10.0.1.2 - это адрес домашнего gw в сети первого сервера.
P.S Если неточен в терминологии, то не пинайте - я только ещё учусь.