здравствуйте
Забрел в тупик с iptables и nat, дакументации перечитал массу, может от этого совсем запутался
Суть в следующем
есть 2 VPN сервера
на первый ( server1 ), коннектимся клиентом, в туннеле поднимается сеть 10.0.0.0, серверный конец туннеля получает 10.0.0.1, клмент 10.0.0.2
добавляем правило
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to ВНЕШНИЙ_ИП
попадаем в инет
теперь поднимаем второй туннель, между VPN серверами, сеть 10.10.0.0, ( сетевуха одна, просто на других портах )
конец второго туннеля на server1 получает 10.10.0.1 на втором сервере 10.10.0.2
собственно затык как завернуть трафик из первого туннеля, во второй, а там на выход
все пытался сделать через SNAT, DNAT, вероятно этого не достаточно ?
извиняюсь если путано, набросал схемку

заранее спасибо
iptables nat + 2 VPN сервера
Для начала зачем 1 подсеть на 2 тунеля?
или vpn 2 это доступ в интернет.
Kettler, почему одна ?
там 2 подсети, от клиента до server1- 10.0.0.0 и между VPN'ами 10.10.0.0
это не локальные VPN, то в их задачу не входит пускать/не пускать в интернет, нужно что-бы точкой входа был первый VPN а точкой выхода второй
теоретически это должно работать, но на практике не получается трафик разрулить
Теперь понял можно посмотреть сам скрипт?
Kettler, так нет никакого скрипта :)
если речь о фаервольном скрипте, я что-бы ничего не мешало, на голый фаервол правила добавлял, то есть все цепочки открыты в факр ничего не загружено
или речь не об этом ?
максимум чего я добился, это пингов с клиентской машины наружу, но запросы nslookup почему-то через все это не пролезли
то есть пингуешь DNS, все в норме, а делаешь nslookup ya.ru 8.8.8.8, выдает:
*** Can't find server name for address 8.8.8.8: No response from server
Server: UnKnown
Address: 8.8.8.8
Где vpn1 ifconfig можно и route -n? Ток чтоб все соедининения впн были подняты.
Kettler, tun0 - это от клиента до vpn1
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:39813 errors:0 dropped:0 overruns:0 frame:0
TX packets:26249 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2379587 (2.2 MiB) TX bytes:2829034 (2.6 MiB)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.4.0.1 P-t-P:10.4.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:570 errors:0 dropped:0 overruns:0 frame:0
TX packets:683 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:37152 (36.2 KiB) TX bytes:39243 (38.3 KiB)
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.4.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
192.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 venet0
0.0.0.0 192.0.2.1 0.0.0.0 UG 0 0 0 venet0
PS, там на схемке немного другие IP
10.0.0.0/24 - это 10.8.0.0/24
10.10.0.0/24 - это 10.4.0.0/24
такс вам надо чтоб 10.10.0.0/24 ходила в 194.10.10.10 ?
venet0 - ?
Kettler, не, трафик приходит из туннеля 10.8.0.1, заворачивается в подсеть второго туннеля 10.4.0.1, и уже со второго сервера в инет, ну и обратный маршрут :)
ок шас разберусь ядром помогу.
на точке vpn 2 нат поднят?
Kettler, ага
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#Маскардинг в локалку
iptables --table nat --append POSTROUTING --out-interface tun1 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Давай начнём с данного скрипта на vpn1. Потом от клиента пинг до vpn 2 будет?
Если не заведёться замени на "iptables --table nat --append POSTROUTING --out-interface tun1 -j MASQUERADE"
iptables -t nat -A PREROUTING -s 10.8.0.0/24 -j DNAT --to-destination 10.4.0.2
И ещё что за интерфейс venet0 ?
Kettler, ага, спасибо большое, только терь жду когда хостеры модули iptables поправят, часть не разрешены в контейнере
venet0 это 2 интнрфейсы с внешними IP и один я для проверки создавал 192.168.10.1
так завелось или нет?
да, с
iptables --table nat --append POSTROUTING --out-interface tun1 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
vpn2 пингуется
попробовал на него добавить
iptables -t nat -A POSTROUTING -s 10.4.0.0/24 -o tun1 -j MASQUERADE
внешние хосты пока не пингуются
кстати
[root@30001176 ~]# echo "1" > /proc/sys/net/ipv4/ip_dynaddr
bash: /proc/sys/net/ipv4/ip_dynaddr: Operation not permitted
теперь на vpn2 покажи nat
на vpn2 надо попробовать добавить
iptables -t nat -A PREROUTING -i tun1 -j DNAT --to-destination ВНЕШНИЙ_ИП
или
iptables -t nat -A PREROUTING -i tun0 -j DNAT --to-destination ВНЕШНИЙ_ИП
Kettler, не уверен что нужно показать)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.4.0.2 P-t-P:10.4.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:720 (720.0 b) TX bytes:1312 (1.2 KiB)
из iptables я пока все убрал
))) ну вроде теперь должно всё завестись как показал выше ну если ток у вас не что запретит.
Kettler, не, не взлетело
внешние хосты начали пинговаться с клиента при таком раскладе
на 1 VPN
Chain PREROUTING (policy ACCEPT 473 packets, 28607 bytes)
pkts bytes target prot opt in out source destination
39 2337 DNAT all -- * * 10.8.0.0/24 0.0.0.0/0 to:10.4.0.2
Chain POSTROUTING (policy ACCEPT 107 packets, 6866 bytes)
pkts bytes target prot opt in out source destination
209 12698 SNAT all -- * * 10.8.0.0/24 0.0.0.0/0 to:10.4.0.1
при пинге с клиента:
[root@30001176 ~]# tcpdump -n -t -i tun1
IP 10.4.0.1 > 10.4.0.2: ICMP echo request, id 1024, seq 54528, length 40
IP 10.4.0.2 > 10.4.0.1: ICMP echo reply, id 1024, seq 54528, length 40
IP 10.4.0.1 > 10.4.0.2: ICMP echo request, id 1024, seq 54784, length 40
IP 10.4.0.2 > 10.4.0.1: ICMP echo reply, id 1024, seq 54784, length 40
IP 10.4.0.1 > 10.4.0.2: ICMP echo request, id 1024, seq 55040, length 40
на tun0 ( это клиент<--->VPN 1 ), тоже в нормне
на 2 VPS сейчас такие правила
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- 10.4.0.0/24 0.0.0.0/0 to:80.67.3.98
DNAT all -- 0.0.0.0/0 80.67.3.98 to:10.4.0.1
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 10.4.0.0/24 0.0.0.0/0 to:80.67.3.98
SNAT all -- 80.67.3.98 0.0.0.0/0 to:10.4.0.2
при этом опять-же nslookup через все это не проходит не проходит
сейчас попробую за втором tcpdump'ом посмотреть, что происходит
в общем из 4 правил на 2 VPN срабатывает только
DNAT all -- 10.4.0.0/24 0.0.0.0/0 to:80.67.3.98
судя по счетчикам :)
пока не увижу правила на vpn2 не что сказать не могу.