Страница 1 из 1

Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-24 15:54:32
Sweeper_jr
Имеется три удаленных между собой хоста A, B и C. Между хостами A и B поднят туннель по статье http://www.lissyara.su/?id=1328, все работает нормально, претензий нет. A и B работают на FreeBSD 4.11.
Нужно поднять такой же туннель между хостами A и С. Хост C работает на FreeBSD 7.1 (с kernel nat, если это важно).
Все вроде просто. Делаем все по инструкции - http://www.lissyara.su/?id=1328. В результате на хосте A создается еще один гиф - gif1, с туннелем и роутингом. Правится ipsec.conf и racoon.conf. Плюс правила для IPFW (в самом вверху до дивертов и форвардов).
Для хоста C по такой же схеме. Правила IPFW запихиваю в самый вверх (ну почти, IPFW по-умолчанию ставит первыми правила для lo0). И все должно работать. Но не работает.
Хост A имеет айпи 192.168.2.100
Хост C имеет айпи 192.168.1.100
Делаю пинг с хоста A на хост C:

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

#ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
^C
--- 192.168.1.100 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss
14:28 bess@box [bess]#ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
^C
--- 192.168.1.100 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
tcpdump на хосте A

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

#tcpdump -i gif1
tcpdump: listening on gif1
14:28:42.065241 192.168.2.100 > 192.168.1.100: icmp: echo request
14:28:43.069211 192.168.2.100 > 192.168.1.100: icmp: echo request
14:28:44.079221 192.168.2.100 > 192.168.1.100: icmp: echo request
14:28:45.089228 192.168.2.100 > 192.168.1.100: icmp: echo request
14:28:46.099238 192.168.2.100 > 192.168.1.100: icmp: echo request
tcpdump на хосте C

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

tcpdump -i gif0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif0, link-type NULL (BSD loopback), capture size 96 bytes
и тишина... :no:
Делаю пинг с хоста C на хост A - тут намного интереснее:

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

# ping 192.168.2.100
PING 192.168.2.100 (192.168.2.100): 56 data bytes
^C
--- 192.168.2.100 ping statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss
tcpdump на хосте C

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

tcpdump -i gif0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif0, link-type NULL (BSD loopback), capture size 96 bytes
14:37:11.783882 IP 192.168.1.100 > 192.168.2.100: ICMP echo request, id 16288, seq 0, length 64
14:37:12.784145 IP 192.168.1.100 > 192.168.2.100: ICMP echo request, id 16288, seq 1, length 64
14:37:13.785110 IP 192.168.1.100 > 192.168.2.100: ICMP echo request, id 16288, seq 2, length 64
14:37:14.786083 IP 192.168.1.100 > 192.168.2.100: ICMP echo request, id 16288, seq 3, length 64
14:37:15.787051 IP 192.168.1.100 > 192.168.2.100: ICMP echo request, id 16288, seq 4, length 64
tcpdump на хосте A

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

#tcpdump -i gif1
tcpdump: listening on gif1
14:35:18.292822 192.168.1.100 > 192.168.2.100: icmp: echo request
14:35:18.292832 192.168.2.100 > 192.168.1.100: icmp: echo reply
14:35:19.294324 192.168.1.100 > 192.168.2.100: icmp: echo request
14:35:19.294334 192.168.2.100 > 192.168.1.100: icmp: echo reply
14:35:20.295794 192.168.1.100 > 192.168.2.100: icmp: echo request
14:35:20.295804 192.168.2.100 > 192.168.1.100: icmp: echo reply
14:35:21.295979 192.168.1.100 > 192.168.2.100: icmp: echo request
14:35:21.295989 192.168.2.100 > 192.168.1.100: icmp: echo reply
Получается хост A получает риквесты и выдает реплаи, а хост C на отрез отказывается как получать риквесты, так и отдавать реплаи. У меня подозрения на IPFW хоста C.
Народ! Хелп! :cz2: Подскажите какие правила должны быть для туннеля? Наверное в семерке в специфика другая? :unknown:

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 10:50:27
schizoid
специфика таже.
1. без фаервола работает?
2. маршруты описаны правильно?

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 11:25:51
Sweeper_jr
schizoid писал(а):специфика таже.
1. без фаервола работает?
2. маршруты описаны правильно?
1. сделал firewall_type="OPEN" - все равно, картина таже.
2. netstat -rn хост A (192.168.2.100):

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

#netstat -rn | grep gif
Destination        Gateway            Flags    Refs      Use  Netif Expire
192.168.1          gif1               USc         0        0   gif1
192.168.1.100      192.168.2.100      UH          0       49   gif1
192.168.3          gif0               USc         0    83431   gif0
192.168.3.100      192.168.2.100      UH          0     7092   gif0
netstat -rn хост C (192.168.1.100):

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

# netstat -rn | grep gif
Destination        Gateway            Flags    Refs      Use  Netif Expire
192.168.2.0/24     gif0               US          0        0   gif0
192.168.2.100      192.168.1.100      UH          0      208   gif0

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 12:36:34
schizoid
а не можешь на время положить второй туннель и проверить? что б тока один одновременно работал...

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 13:40:57
Sweeper_jr
Положил один туннель, один из двух тот который рабочий. Ситуация ни как не изменилась.
Но по ходу заметил в netstat -rn в колонке Use для маршрута который определяет шлюз - значения по нулям:

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

Destination        Gateway            Flags    Refs      Use  Netif Expire
192.168.1          gif1               USc         0        0   gif1
192.168.1.100      192.168.2.100      UH          0       49   gif1

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

Destination        Gateway            Flags    Refs      Use  Netif Expire
192.168.2.0/24     gif0               US          0        0   gif0
192.168.2.100      192.168.1.100      UH          0      208   gif0
А так не должно быть как я понимаю. У другого туннеля показывает количество пакетов отличное от нуля, и оно увеличивается по мере передачи.

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

Destination        Gateway            Flags    Refs      Use  Netif Expire
192.168.3          gif0               USc         0     6851   gif0
192.168.3.100      192.168.2.100      UH          0      108   gif0
Все равно не пойму куда копать... :unknown:

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 13:51:38
schizoid
arp -a -d
трассу пусти, в шлюз идет?
где-то наверна мелкий косяк какой-то...
может когда копировал настройки с рабочего туннеля -не все поправил...

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 13:59:19
schizoid
ну и по внешним Ипам жеж они нормально видят друг друга?

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-25 17:02:14
Sweeper_jr
schizoid писал(а):arp -a -d
трассу пусти, в шлюз идет?
где-то наверна мелкий косяк какой-то...
может когда копировал настройки с рабочего туннеля -не все поправил...
arp -a -d сделал...
traceroute в сети нашего провайдера вообще не пашет (все три хоста находятся у одного провайдера), за пределами, например, traceroute yandex.com - все ок. Но если трейсить из локалки (A), то трейс пытается пройти через нужный gif1 по заданному маршруту.
Все настройки перепроверил еще раз, все вроде пучком.
По внешним айпишниках все гуд - ssh, ftp, ping..
Вот правила IPFW того хоста который не хочет принимать пакеты, посмотрите все ли нормально?

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

00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
# Тунель
01021 allow ip from any to any via gif0
01022 allow udp from C.C.C.C to A.A.A.A dst-port 500
01023 allow udp from A.A.A.A to C.C.C.C dst-port 500
01024 allow esp from C.C.C.C to A.A.A.A
01025 allow esp from A.A.A.A to C.C.C.C
#
01040 allow ip from any to any via sis0
01050 deny ip from any to 192.168.0.0/16 in recv sis0
01060 deny ip from 192.168.0.0/16 to any in recv sis0
01070 deny ip from any to 172.16.0.0/12 in recv sis0
01080 deny ip from 172.16.0.0/12 to any in recv sis0
01090 deny ip from any to 10.0.0.0/8 in recv sis0
10100 deny ip from 10.0.0.0/8 to any in recv sis0
10110 deny ip from any to 169.254.0.0/16 in recv sis0
10120 deny ip from 169.254.0.0/16 to any in recv sis0
10126 allow icmp from me to any
10127 allow icmp from any to me
ipfw nat 1 config if xl0 log same_ports reset redirect_port tcp C.C.C.C:21 21 redirect_port tcp C.C.C.C:22 22
10130 nat 1 tcp from any to any out xmit xl0 limit src-addr 100
10140 nat 1 ip from any to any out xmit xl0
10150 nat 1 ip from any to any in recv xl0
10153 allow icmp from any to any via sis0
65534 deny ip from any to any
net.inet.ip.fw.enable: 0 -> 1

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-26 10:36:45
schizoid
вообще на все deny поставьте логирование.
и еще, я вот не помню, gif туннель gre не использует часом? а то тоже нуно б ipfw add allow gre from any to any поставить...
ну и давайте в догонку тогда уже ifconfig с обоих серваков. rc.conf.
и еще. без ipsec через туннель пакетики ходють?

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-26 10:46:59
schizoid
ну и коменты к статье почитай

Re: Второй туннель через IPSec и правила для IPFW FreeBSD 7.1

Добавлено: 2009-11-27 18:15:39
sch
Через IPSEC пакеты типа ICMP проходят с ограничениями - например пинги на маршрутизатор, терминирующий туннель, тупо где-то теряются в сетевой подсистеме. Также из-за этого очень плохо работает технология PMTUD.
В общем для диагностики советую пинговать не маршрутизатор, а хост за ним.

В 7.2-R исправили несколько проблем в работе IPSEC через gif, по моему эту фигню с ICMP тоже поправили.