FreeBSD 7 Kernel Nat Парадокс или кривые руки

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Darwent
рядовой
Сообщения: 23
Зарегистрирован: 2008-11-17 10:28:39

FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение Darwent » 2008-11-17 16:51:03

Есть два компьютера и сервер.

Код: Выделить всё

+-----------+        +------------+         +-----------+ 
|  Комп 1   |<------>| FreeBSD    |<------->|  Комп 2   |
+-----------+        +------------+         +-----------+
Установлено 2 сетевые карты
1. Intel PCI-E 1x
2. Какаято VIA PCI

Код: Выделить всё

[root@hs1 ~]# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 00:1b:21:22:e3:dd
        inet 10.27.0.20 netmask 0xffffff00 broadcast 10.27.0.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:30:4f:34:9b:fa
        inet 10.28.0.1 netmask 0xff000000 broadcast 10.255.255.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet 127.0.0.1 netmask 0xff000000
Настраиваю ipfw

Код: Выделить всё

[root@hs1 ~]# cat /etc/ipfw.conf
#!/bin/sh
cmd="/sbin/ipfw -q" # ipfw command

${cmd} -f flush
${cmd} add check-state
${cmd} add allow ip from any to any via lo0
${cmd} add deny ip from any to 127.0.0.0/8
${cmd} add deny ip from 127.0.0.0/8 to any

#--------NAT-----------------------------------------------
${cmd} nat 10 config if vr0
${cmd} add nat 10 ip4 from any to any via vr0

${cmd} add allow ip from any to any
В виде эксперимента с Kernel Nat разрешил всё. На обоих машинах сервер стоит как шлюз. Если указать nat vr0 то с пинги со второго компютера до компьютера 1 не идут. С первого до второго идут. На обоих компьютерах можно подключится к серверу по SSH и никаких ограничений.
Странно то что если указать nat em0, то со второго компьютера до первого пинги идут но у первого пропадает доступ к серверу всё что можно сделать это его попинговать.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение hizel » 2008-11-17 17:12:37

жую :)

предположим что первый компьютер за vr0
второй за em0

Код: Выделить всё

${cmd} nat 10 config if vr0
${cmd} add nat 10 ip4 from any to any via vr0
1. пакетик от второго компа прилетает на em0 , роутицо на vr0 и вылетая из vr0 приобразуется натом к айпишнегу прибитому на vr0
долетает до первого компьютера, первый отвечает, пакетик прилетает на vr0, натицо обратно и летит до компа за em0 второго тобишь

2. пакетик от первого компа прилетает на vr0, роутицо до em0 и летит до воторой машины, вторая отвечает, ответ прилетает на em0
роутицо до vr0 и тут хряк вылетая из vr0 натицо и в таком виде прилетает к первому компу, первый комп в шоке, пинг ясен пень не защитывается =)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Darwent
рядовой
Сообщения: 23
Зарегистрирован: 2008-11-17 10:28:39

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение Darwent » 2008-11-17 17:23:50

hizel писал(а):жую :)

предположим что первый компьютер за vr0
второй за em0

Код: Выделить всё

${cmd} nat 10 config if vr0
${cmd} add nat 10 ip4 from any to any via vr0
1. пакетик от второго компа прилетает на em0 , роутицо на vr0 и вылетая из vr0 приобразуется натом к айпишнегу прибитому на vr0
долетает до первого компьютера, первый отвечает, пакетик прилетает на vr0, натицо обратно и летит до компа за em0 второго тобишь

2. пакетик от первого компа прилетает на vr0, роутицо до em0 и летит до воторой машины, вторая отвечает, ответ прилетает на em0
роутицо до vr0 и тут хряк вылетая из vr0 натицо и в таком виде прилетает к первому компу, первый комп в шоке, пинг ясен пень не защитывается =)
Тут собственно:
Компьютер 1 сиди на em0 если включить нат на em0 то с компьютера 1 по ip адересу em0 происходит что-то непонятное работает только пинг
Компьютер 2 сидит на vr0 если включить нат на этом устройстве всё работает без сбоев

С Дивертом таких проблем небыло, только хотелось попрабовать именно Kernel Nat, так как надо для домашней сети натить интернет, и 2 локалки.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение hizel » 2008-11-17 17:45:46

хорошо бы ipfw show и ipfw nat 10 show config в обоих случаях

ХИНТ: сколько раз пакет натится если извесно, что через правило via $int пакет в одну сторону проходит два раза? ;)

тут видимо отличие в том что divert если пропускает\обрабатывает пакет, то пущает его дальше по правилам , а в kernel nat имеет значение опция one_pass которая по умолчанию включена, тоесть пакетик пройдя через nat сразу акцептицо
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Darwent
рядовой
Сообщения: 23
Зарегистрирован: 2008-11-17 10:28:39

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение Darwent » 2008-11-17 18:04:49

hizel писал(а):хорошо бы ipfw show и ipfw nat 10 show config в обоих случаях

ХИНТ: сколько раз пакет натится если извесно, что через правило via $int пакет в одну сторону проходит два раза? ;)

тут видимо отличие в том что divert если пропускает\обрабатывает пакет, то пущает его дальше по правилам , а в kernel nat имеет значение опция one_pass которая по умолчанию включена, тоесть пакетик пройдя через nat сразу акцептицо

Код: Выделить всё

[root@hs1 ~]# ipfw show
00100    0      0 check-state
00200    0      0 allow ip from any to any via lo0
00300    0      0 deny ip from any to 127.0.0.0/8
00400    0      0 deny ip from 127.0.0.0/8 to any
00500 8080 402248 nat 10 ip4 from any to any via vr0
00600 8059 431445 allow tcp from any to any out
00700   26   1506 allow udp from any to any out
00800  359  34642 allow ip from any to any via em0
00900    0      0 allow ip from any to any
65535    0      0 deny ip from any to any

[root@hs1 ~]# ipfw nat 10 show config
ipfw nat 10 config if vr0

Код: Выделить всё

[root@hs1 ~]# ipfw show
00100   0     0 check-state
00200   0     0 allow ip from any to any via lo0
00300   0     0 deny ip from any to 127.0.0.0/8
00400   0     0 deny ip from 127.0.0.0/8 to any
00500 199 50707 nat 10 ip4 from any to any via em0
00600  83 22880 allow tcp from any to any out
00700   0     0 allow udp from any to any out
00800   0     0 allow ip from any to any via em0
00900 112 26578 allow ip from any to any
65535   0     0 deny ip from any to any

[root@hs1 ~]# ipfw nat 10 show config
ipfw nat 10 config if em0

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение hizel » 2008-11-17 19:59:56

*недоумение*

только tcpdump видимо прольет свет понимания на эту ситуацию
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Darwent
рядовой
Сообщения: 23
Зарегистрирован: 2008-11-17 10:28:39

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение Darwent » 2008-11-17 20:46:11

hizel писал(а):*недоумение*

только tcpdump видимо прольет свет понимания на эту ситуацию
Попробовал tcpdump правда мало что понял вот логи в двух случаях

1. Нат на em0 и соответсвенно сервер по ip em0 только пингуется

Код: Выделить всё

20:16:19.938680 IP 10.27.0.1.ndm-requester > 10.27.0.20.ssh: S 500718261:500718261(0) win 65535 <mss 1460,nop,nop,sackOK>
20:16:19.938710 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:20.254464 IP 10.27.0.20.33960 > 10.27.0.254.domain: 43846+ PTR? 20.0.27.10.in-addr.arpa. (41)
20:16:22.825021 IP 10.27.0.1.ndm-requester > 10.27.0.20.ssh: S 500718261:500718261(0) win 65535 <mss 1460,nop,nop,sackOK>
20:16:22.825031 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:25.357527 IP 10.27.0.20.33960 > 10.27.0.254.domain: 43846+ PTR? 20.0.27.10.in-addr.arpa. (41)
20:16:25.886113 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:28.840694 IP 10.27.0.1.ndm-requester > 10.27.0.20.ssh: S 500718261:500718261(0) win 65535 <mss 1460,nop,nop,sackOK>
20:16:28.840704 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:31.901596 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:35.562982 IP 10.27.0.20.27222 > 10.27.0.254.domain: 43847+ PTR? 1.0.27.10.in-addr.arpa. (40)
20:16:38.024229 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:40.666148 IP 10.27.0.20.27222 > 10.27.0.254.domain: 43847+ PTR? 1.0.27.10.in-addr.arpa. (40)
20:16:50.269494 IP 10.27.0.20.ssh > 10.27.0.1.ndm-requester: S 2829909988:2829909988(0) ack 500718262 win 65535 <mss 1460,sackOK,eol>
20:16:51.892036 IP 10.27.0.20.49598 > 10.27.0.254.domain: 43848+ PTR? 254.0.27.10.in-addr.arpa. (42)
20:16:56.995210 IP 10.27.0.20.49598 > 10.27.0.254.domain: 43848+ PTR? 254.0.27.10.in-addr.arpa. (42)
20:17:30.913703 IP 10.27.0.1 > 10.27.0.20: ICMP echo request, id 1024, seq 19968, length 40
20:17:30.913714 IP 10.27.0.20 > 10.27.0.1: ICMP echo reply, id 1024, seq 19968, length 40
20:17:31.905883 IP 10.27.0.1 > 10.27.0.20: ICMP echo request, id 1024, seq 20224, length 40
20:17:31.905891 IP 10.27.0.20 > 10.27.0.1: ICMP echo reply, id 1024, seq 20224, length 40
20:17:58.501248 IP 10.27.0.1.netbios-dgm > 10.27.0.255.netbios-dgm: NBT UDP PACKET(138)
2. Тут нат отключен и к серверу подключает.

Код: Выделить всё

20:22:21.965945 arp who-has 10.27.0.20 tell 10.27.0.1
20:22:21.965959 arp reply 10.27.0.20 is-at 00:1b:21:22:e3:dd (oui Unknown)
20:22:21.966566 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: S 2987811056:2987811056(0) win 65535 <mss 1460,nop,nop,sackOK>
20:22:21.966592 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: S 2301099375:2301099375(0) ack 2987811057 win 65535 <mss 1460,sackOK,eol>
20:22:21.966940 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: . ack 1 win 65535
20:22:22.016512 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: P 1:40(39) ack 1 win 65535
20:22:22.017037 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 1:29(28) ack 40 win 65496
20:22:22.017162 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 29:541(512) ack 40 win 65496
20:22:22.017169 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: . ack 541 win 65188
20:22:22.017172 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 541:645(104) ack 40 win 65496
20:22:22.018000 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: P 40:776(736) ack 645 win 65084
20:22:22.018536 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 645:661(16) ack 776 win 64760
20:22:22.023327 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: P 776:1312(536) ack 661 win 65535
20:22:22.209684 IP 10.27.0.20.42304 > 10.27.0.254.domain: 31433+ PTR? 20.0.27.10.in-addr.arpa. (41)
20:22:22.210801 IP 10.27.0.254.domain > 10.27.0.20.42304: 31433 NXDomain 0/1/0 (91)
20:22:22.210881 IP 10.27.0.20.25188 > 10.27.0.254.domain: 31434+ PTR? 1.0.27.10.in-addr.arpa. (40)
20:22:22.211800 IP 10.27.0.254.domain > 10.27.0.20.25188: 31434 NXDomain 0/1/0 (90)
20:22:22.235286 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: . ack 1312 win 64224
20:22:22.250153 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 661:1173(512) ack 1312 win 64224
20:22:22.250158 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 1173:1189(16) ack 1312 win 64224
20:22:22.250165 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: . ack 1189 win 65172
20:22:22.266497 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: P 1312:2352(1040) ack 1189 win 65535
20:22:22.454036 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: . ack 2352 win 65535
20:22:22.566722 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 1189:1205(16) ack 2352 win 65535
20:22:22.567221 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: P 1205:1257(52) ack 2352 win 65535
20:22:22.567228 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: . ack 1257 win 65535
20:22:22.567278 IP 10.27.0.20.ssh > 10.27.0.1.timbuktu-srv2: P 2352:2404(52) ack 1257 win 65535
20:22:22.782098 IP 10.27.0.1.timbuktu-srv2 > 10.27.0.20.ssh: . ack 2404 win 65483
20:22:23.232123 IP 10.27.0.20.62403 > 10.27.0.254.domain: 31435+ PTR? 254.0.27.10.in-addr.arpa. (42)
20:22:23.233214 IP 10.27.0.254.domain > 10.27.0.20.62403: 31435 NXDomain 0/1/0 (92)

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение hizel » 2008-11-17 21:10:04

10.27.0.20 пытается обратную зону разресолвить, а ему никто не отвечает =/
если бы подождали малек, то он и по ssh вас бы пустил ;)

сравните

1.

Код: Выделить всё

20:16:35.562982 IP 10.27.0.20.27222 > 10.27.0.254.domain: 43847+ PTR? 1.0.27.10.in-addr.arpa. (40)
2.

Код: Выделить всё

20:22:22.209684 IP 10.27.0.20.42304 > 10.27.0.254.domain: 31433+ PTR? 20.0.27.10.in-addr.arpa. (41)
20:22:22.210801 IP 10.27.0.254.domain > 10.27.0.20.42304: 31433 NXDomain 0/1/0 (91)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Darwent
рядовой
Сообщения: 23
Зарегистрирован: 2008-11-17 10:28:39

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение Darwent » 2008-11-17 21:55:05

hizel писал(а):10.27.0.20 пытается обратную зону разресолвить, а ему никто не отвечает =/
если бы подождали малек, то он и по ssh вас бы пустил ;)

сравните

1.

Код: Выделить всё

20:16:35.562982 IP 10.27.0.20.27222 > 10.27.0.254.domain: 43847+ PTR? 1.0.27.10.in-addr.arpa. (40)
2.

Код: Выделить всё

20:22:22.209684 IP 10.27.0.20.42304 > 10.27.0.254.domain: 31433+ PTR? 20.0.27.10.in-addr.arpa. (41)
20:22:22.210801 IP 10.27.0.254.domain > 10.27.0.20.42304: 31433 NXDomain 0/1/0 (91)
Проблема заключалась в опция сетевой карты интел rxcsum, txcsum. При их отключении через ifconfig всё заработало. А вот что это за опции буду читать :) hizel благодарю за помощь наставил на путь истинный!

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение hizel » 2008-11-17 22:23:00

:shock:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Darwent
рядовой
Сообщения: 23
Зарегистрирован: 2008-11-17 10:28:39

Re: FreeBSD 7 Kernel Nat Парадокс или кривые руки

Непрочитанное сообщение Darwent » 2008-11-17 22:31:29

hizel писал(а)::shock:
Сам немного в шоке, как контрольные суммы могут влиять на работу нат, но факт остался фактом. Но при отключении этих опций и TSO всё заработало.