LINUX.ORG.RU
ФорумAdmin

iptables DNAT SNAT


0

1

День добрый, подскажите, как решить такую задачу: Есть сервер с адресом 192.168.0.1, у него должен быть доступ к компьютерам с адресами 192.168.1.1 (у обоих одинаковый), вот только к первому доступ идет через getway 192.168.0.2, а ко второму через getway 192.168.0.3. В route можно прописать только один. Адреса никому менять нельзя.

Вот и тоит задача получить доступ к обоим. Решение может конечно странное, но подумал, что можно на машине 192.168.0.2 настроить iptables, что бы на сервере одну из 192.168.1.1 заменить на 192.168.2.1 и отправлять пакеты на 192.168.0.2, а он менял 192.168.2.1 на 192.168.1.1 и отправлял куда надо.

Так вот прописываю роуты на сервере 192.168.0.1:

route add -net 192.168.1.1 gw 192.168.0.3 netmask 255.255.255.255
route add -net 192.168.2.1 gw 192.168.0.2 netmask 255.255.255.255
В настройках iptables на 192.168.0.2 ставлю:
iptables -t nat -A PREROUTING -d 192.168.2.1 -j DNAT --to-destination 192.168.1.1 
iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to-source 192.168.2.1
Пингую с сервера 192.168.2.1 и получаю ровным счетом ничего.

Вообще, вопросы надо задавать на трезвую голову. Распарсить это нереально.

Встречные вопросы: 1) Какой дистрибутив/ОС на сервере/маршрутизаторе? 2) Кому куда доступ нужен?

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

Нет. Почему? Потому, что лишняя информация, еще хуже, чем её отсутвие. Но специально для Вас. Сервер:

uname -a
Linux 633 2.6.32-5-686 #1 SMP Mon Jan 16 16:04:25 UTC 2012 i686 GNU/Linux

route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.1     192.168.0.2   255.255.255.255 UGH   0      0        0 eth0
192.168.1.1     192.168.0.3   255.255.255.255 UGH   0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.0.95    0.0.0.0         UG    0      0        0 eth0

ifconfig
eth0      Link encap:Ethernet  HWaddr 00:15:f2:cc:85:a0  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::215:f2ff:fecc:85a0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3268098 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2147455 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1428333701 (1.3 GiB)  TX bytes:2369069519 (2.2 GiB)
          Interrupt:17 

ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_req=1 ttl=64 time=0.244 ms
64 bytes from 192.168.0.2: icmp_req=2 ttl=64 time=0.244 ms
^C
--- 192.168.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.244/0.244/0.244/0.000 ms

ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
^C
--- 192.168.2.1 ping statistics ---
32 packets transmitted, 0 received, 100% packet loss, time 31248ms

imirrori ()
Ответ на: комментарий от nickleiten

Тот комп, что 192.168.0.2

uname -a
Linux imirrori-ThinkPad-SL500 3.11.0-17-generic #31-Ubuntu SMP Mon Feb 3 21:53:31 UTC 2014 i686 i686 i686 GNU/Linux

iptables-save 
# Generated by iptables-save v1.4.18 on Thu Feb 27 14:57:47 2014
*nat
:PREROUTING ACCEPT [1245:196710]
:INPUT ACCEPT [175:22621]
:OUTPUT ACCEPT [1790:113646]
:POSTROUTING ACCEPT [1790:113646]
-A PREROUTING -d 192.168.6.1/32 -j DNAT --to-destination 192.168.4.1
-A POSTROUTING -s 192.168.4.1/32 -j SNAT --to-source 192.168.6.1
COMMIT
# Completed on Thu Feb 27 14:57:47 2014
# Generated by iptables-save v1.4.18 on Thu Feb 27 14:57:47 2014
*filter
:INPUT ACCEPT [1013194:190261358]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1476806:2014850472]
COMMIT


lsmod | grep ip
iptable_nat            12867  1 
nf_conntrack_ipv4      14492  1 
nf_defrag_ipv4         12649  1 nf_conntrack_ipv4
nf_nat_ipv4            13095  1 iptable_nat
nf_nat                 25588  3 nf_nat_ipv4,xt_nat,iptable_nat
nf_conntrack           82913  4 nf_nat,nf_nat_ipv4,iptable_nat,nf_conntrack_ipv4
iptable_filter         12706  0 
ip_tables              17987  2 iptable_filter,iptable_nat
x_tables               22067  3 ip_tables,xt_nat,iptable_filter


tcpdump -nn -i eth0 -vvv 
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:21:08.678772 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.2.1: ICMP echo request, id 27055, seq 76, length 64
18:21:09.220814 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.176 tell 192.168.0.12, length 46
18:21:09.455252 00:04:23:bf:71:88 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 2d04 1400 0200 0004 23bf 7189  ....-.......#.q.
        0x0010:  0000 40d4 0700 40d4 0700 40d4 0700 40d4  ..@...@...@...@.
        0x0020:  0700 40d4 0700 a7d0 0700 0f00 0100 4d6d  ..@...........Mm
        0x0030:  496e                                     In
18:21:09.455263 00:04:23:bf:71:89 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 2d04 1400 0100 0004 23bf 7189  ....-.......#.q.
        0x0010:  66e1 2cbe 1682 c932 068a 0000 0000 2400  f.,....2......$.
        0x0020:  4200 00d0 0100 00e0 9ab9 0000 0000 0020  B...............
        0x0030:  0000                                     ..
18:21:09.485737 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.22 tell 192.168.0.39, length 46
18:21:09.685745 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.2.1: ICMP echo request, id 27055, seq 77, length 64
18:21:10.170172 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.23 tell 192.168.0.2, length 46
18:21:10.217959 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.176 tell 192.168.0.12, length 46
18:21:10.455213 00:04:23:bf:71:88 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 2e04 1400 0200 0004 23bf 7189  ............#.q.
        0x0010:  0000 40d4 0700 40d4 0700 40d4 0700 40d4  ..@...@...@...@.
        0x0020:  0700 40d4 0700 a7d0 0700 0f00 0100 4d6d  ..@...........Mm
        0x0030:  496e                                     In
18:21:10.455224 00:04:23:bf:71:89 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 2e04 1400 0100 0004 23bf 7189  ............#.q.
        0x0010:  66e1 2cbe 1682 c932 068a 0000 0000 2400  f.,....2......$.
        0x0020:  4200 00d0 0100 00e0 9ab9 0000 0000 0020  B...............
        0x0030:  0000                                     ..
18:21:10.481650 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.22 tell 192.168.0.39, length 46
18:21:10.666127 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.2 (ff:ff:ff:ff:ff:ff) tell 192.168.0.2, length 46
18:21:10.693798 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.2.1: ICMP echo request, id 27055, seq 78, length 64
18:21:11.231882 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.176 tell 192.168.0.12, length 46
18:21:11.455180 00:04:23:bf:71:88 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 2f04 1400 0200 0004 23bf 7189  ..../.......#.q.
        0x0010:  0000 40d4 0700 40d4 0700 40d4 0700 40d4  ..@...@...@...@.
        0x0020:  0700 40d4 0700 a7d0 0700 0f00 0100 4d6d  ..@...........Mm
        0x0030:  496e                                     In
18:21:11.455191 00:04:23:bf:71:89 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 2f04 1400 0100 0004 23bf 7189  ..../.......#.q.
        0x0010:  66e1 2cbe 1682 c932 068a 0000 0000 2400  f.,....2......$.
        0x0020:  4200 00d0 0100 00e0 9ab9 0000 0000 0020  B...............
        0x0030:  0000                                     ..
18:21:11.481559 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.22 tell 192.168.0.39, length 46
18:21:11.701808 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.2.1: ICMP echo request, id 27055, seq 79, length 64
18:21:12.245935 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.176 tell 192.168.0.12, length 46
18:21:12.455160 00:04:23:bf:71:88 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 3004 1400 0200 0004 23bf 7189  ....0.......#.q.
        0x0010:  0000 40d4 0700 40d4 0700 40d4 0700 40d4  ..@...@...@...@.
        0x0020:  0700 40d4 0700 a7d0 0700 0f00 0100 4d6d  ..@...........Mm
        0x0030:  496e                                     In
18:21:12.455170 00:04:23:bf:71:89 > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x886d), length 64: 
        0x0000:  0001 0001 3004 1400 0100 0004 23bf 7189  ....0.......#.q.
        0x0010:  66e1 2cbe 1682 c932 068a 0000 0000 2400  f.,....2......$.
        0x0020:  4200 00d0 0100 00e0 9ab9 0000 0000 0020  B...............
        0x0030:  0000                                     ..
18:21:12.581359 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.22 tell 192.168.0.39, length 46
18:21:12.589139 IP (tos 0x0, ttl 128, id 961, offset 0, flags [none], proto UDP (17), length 78)
    192.168.0.12.137 > 192.168.0.255.137: [udp sum ok] 
>>> NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
TrnID=0xD0B9
OpCode=0
NmFlags=0x11
Rcode=0
QueryCount=1
AnswerCount=0
AuthorityCount=0
AddressRecCount=0
QuestionRecords:
Name=ISATAP          NameType=0x00 (Workstation)
QuestionType=0x20
QuestionClass=0x1


18:21:12.589297 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 78)
    192.168.0.27.137 > 192.168.0.255.137: [udp sum ok] 
>>> NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
TrnID=0x3B86
OpCode=0
NmFlags=0x11
Rcode=0
QueryCount=1
AnswerCount=0
AuthorityCount=0
AddressRecCount=0
QuestionRecords:
Name=NIIREK          NameType=0x1D (Master Browser)
QuestionType=0x20
QuestionClass=0x1


18:21:12.589489 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 78)
    192.168.0.7.137 > 192.168.0.255.137: [udp sum ok] 
>>> NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
TrnID=0x3958
OpCode=0
NmFlags=0x11
Rcode=0
QueryCount=1
AnswerCount=0
AuthorityCount=0
AddressRecCount=0
QuestionRecords:
Name=NIIREK          NameType=0x1D (Master Browser)
QuestionType=0x20
QuestionClass=0x1


18:21:12.589516 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.27 tell 192.168.0.1, length 46
18:21:12.589686 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.7 tell 192.168.0.1, length 46
18:21:12.589887 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.7 tell 192.168.0.2, length 46
18:21:12.709797 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.20 > 192.168.6.1: ICMP echo request, id 27055, seq 80, length 64
^C
54 packets captured
54 packets received by filter
0 packets dropped by kernel
Доступ нужен с сервера к 192.168.1.1 к обоим.

imirrori ()

Пингую с сервера 192.168.2.1 и получаю ровным счетом ничего.

кто на ком стоял?

1) SNAT здесь не нужен
2) на сервере 1.1, который находится за 0.2, должен быть известен маршрут до хоста 0.1 через сервер 0.2, который смотрит в сеть 192.168.1.0/24 своим вторым интерфейсом

вообще, лучше называть хосты буквами (A, B, C,...), и потом перечислять сетевые интерфейсы с их адресами каждого хоста, а то нихера не понятно:

       ---B---D1
     /
A---+
     \
       ---C---D2

A: 0.1
B: 0.2(слева), 1.b(справа)
C: 0.3(слева), 1.c(справа)
D1: 1.1
D2: 1.1
такая схема то хоть что ли?

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

Хм, тут проблема с D1. Его нельзя трогать. Это устройство поставляется с нстройками, которые не изменны. И ядро там сильно порезанно... Так что надо что то думать с B.

imirrori ()
Ответ на: комментарий от anonymous

Да есть. Но настройки все равно менять нельзя. Так бы и проблем не было. Сделал бы не 1.1, а 2.1 у конечного адресата и все.

imirrori ()
Ответ на: комментарий от anonymous

надо полагать, что он не равен 1.b?

anonymous ()

Что за загадочный "доступ" такой? Если нужно цепляться, скажем по TCP, на оба *.1.1:80, то настрой форвардинг этого порта на машинах *.0.2 и *.0.3, да цепляйся на здоровье c сервера на *.0.2:80 и *.0.3:80. Или нужно именно icmp ping сделать, чтобы работал до обоих *.1.1 или что?

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

А можно все в примерах?

Пример форвардинга TCP-порта (10.0.0.2:4567 => 10.0.0.3:7654). Пример в работе.

Адреса и порты заменить так, чтобы первый твой "getway" делал, скажем, *.0.2:80 => *.1.1:80, а второй чтобы делал соответственно *.0.3:80 => *.1.1:80.

d_a ★★★★★ ()

Рубрика ''На заметку''

А вообще, если ваши эмбеддеры опять захардкодировали пару IP/MAC и теперь изгаляются, то не стоит впадать в панику. Все их N симметричных клонов можно пришлюзовать в нормальную сеть с помощью всего одной машины на N+1 сетевух, а различать извне по номеру проброшенного порта. То есть по сути запилить демультиплексор. Тут правда уже посложнее, помимо собственно N наборов правил для форвардинга понадобится проставлять файрволлом метки на пакеты для каждого порта и применять адвансед роутинг в нужные сетевухи по этим меткам (это тот, который из /etc/iproute2/rt_tables, а не route(8) легаси-добро).

d_a ★★★★★ ()

Вам доступ то только в одну сторону нужен, в смысле, чтобы только 192.168.0.1 мог устанавливать соединение, а 192.168.1.1 не могли сами активировать соединение?

А так я присоединяюсь к совету в первом ответе. Ибо, сначала у вас ″-j DNAT --to-destination 192.168.1.1″, а потом в выводе iptables-save ″-A PREROUTING -d 192.168.6.1/32 -j DNAT --to-destination 192.168.4.1″.

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

Это потому, что забыл перебить во время эксперементов.

В итоге, ни кто не знает почему не работает iptables. Все знатют, что проблему можно решить, но все почему то пытаются изобрести велосипед, хотя вроде тему специально назвал iptables DNAT SNAT, а ответов именно по этому вопросу вообще НЕТ! Получается примерно так. Я спрашиваю:
«Привет, как дела?»
А вы отвечаете
«Ты что на немецких танках в гору не заедешь под углом 43 градуса. Ну ты дурак.»
Конечно спасибо, за информацию, но к сути дела она не относится.

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

хотя вроде тему специально назвал iptables DNAT SNAT, а ответов именно по этому вопросу вообще НЕТ!

Мне бы главное, что бы работало, а через SNAT или воздушные шарики, это все равно))

/0

резюме: очередной умник, который и так все сам знает, но почему-то все-таки не может настроить нужную ему схему и спрашивает на лоре, считая тем не менее, что здесь одни школьники и балбесы

иди лесом, товарищ

anonymous ()
Ответ на: комментарий от imirrori

НЕ работает и с правильными ip.

Ну дак и давайте tcpdump при правильных ip в iptables и с обоих интерфейсах. Ведь на хосте «C» два физических интерфейса?

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

Все знатют, что проблему можно решить,

Все пытаются понять, что именно вы пытаетесь сделать и какая топология сети.

Вам дважды задавался вопрос про то, что вы подразумеваете под словом «доступ»:

Что за загадочный «доступ» такой?

Вам доступ то только в одну сторону нужен?

Анонимус пытается разобраться с вашей ip-адресацией, но вы решили не сообщать какой шлюз (GW) на D1.

Я даже боюсь спрашивать, на каком основании вы решили, что «не работает iptables», может проблема в маршрутизации?

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