LinuxForum.Fans
Тема

iptables nat + 2 VPN сервера

Автор: sergey_ 20 сообщений 7212 просмотров
#119452

здравствуйте
Забрел в тупик с 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, вероятно этого не достаточно ?
извиняюсь если путано, набросал схемку



заранее спасибо

#119510

Для начала зачем 1 подсеть на 2 тунеля?
или vpn 2 это доступ в интернет.

#119618

Kettler, почему одна ?
там 2 подсети, от клиента до server1- 10.0.0.0 и между VPN'ами 10.10.0.0
это не локальные VPN, то в их задачу не входит пускать/не пускать в интернет, нужно что-бы точкой входа был первый VPN а точкой выхода второй
теоретически это должно работать, но на практике не получается трафик разрулить

#119626

Теперь понял можно посмотреть сам скрипт?

#119628

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
#119632

Где vpn1 ifconfig можно и route -n? Ток чтоб все соедининения впн были подняты.

#119661

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

#119731

такс вам надо чтоб 10.10.0.0/24 ходила в 194.10.10.10 ?
venet0 - ?

#119735

Kettler, не, трафик приходит из туннеля 10.8.0.1, заворачивается в подсеть второго туннеля 10.4.0.1, и уже со второго сервера в инет, ну и обратный маршрут :)

#119780

ок шас разберусь ядром помогу.
на точке vpn 2 нат поднят?

#119793

Kettler, ага

#119797

#!/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 ?

#119807

Kettler, ага, спасибо большое, только терь жду когда хостеры модули iptables поправят, часть не разрешены в контейнере
venet0 это 2 интнрфейсы с внешними IP и один я для проверки создавал 192.168.10.1

#119823

так завелось или нет?

#119932

да, с


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

#119965

теперь на 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 ВНЕШНИЙ_ИП

#119966

Kettler, не уверен что нужно показать)

text

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 я пока все убрал

#119967

))) ну вроде теперь должно всё завестись как показал выше ну если ток у вас не что запретит.

#119990

Kettler, не, не взлетело
внешние хосты начали пинговаться с клиента при таком раскладе
на 1 VPN

text

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 сейчас такие правила

text

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
судя по счетчикам :)

#120003

пока не увижу правила на vpn2 не что сказать не могу.

Войдите или зарегистрируйтесь, чтобы ответить.