nixp.ru v3.0

29 мая 2017,
понедельник,
12:36:41 MSK

DevOps с компанией «Флант»
Аватар пользователя DimkaS
DimkaS написал 1 ноября 2008 года в 13:20 (2876 просмотров) Ведет себя как мужчина; открыл 84 темы в форуме, оставил 922 комментария на сайте.

Пытаюсь настроить IPsec туннель между двумя роутерами. Железо на ARM9, отсюда некоторые ньюансы и минимализм.

Кусок лога:

Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: Starting Pluto (Openswan Version 2.2.0 X.509-1.5.4 PLUTO_USES_KEYRR)
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]:   including NAT-Traversal patch (Version 0.6c) [disabled]
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: ike_alg_register_enc(): Activating OAKLEY_AES_CBC: Ok (ret=0)
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: Using KLIPS IPsec interface code
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: Changing to directory '/etc/ipsec.d/cacerts'
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: Changing to directory '/etc/ipsec.d/aacerts'
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: Changing to directory '/etc/ipsec.d/ocspcerts'
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]: Changing to directory '/etc/ipsec.d/crls'
Nov  1 10:03:16 ER75iX authpriv.warn pluto[1121]:   Warning: empty directory
Nov  1 10:03:19 ER75iX authpriv.warn pluto[1121]: added connection description "ipsec"
Nov  1 10:03:19 ER75iX authpriv.warn pluto[1121]: listening for IKE messages
Nov  1 10:03:19 ER75iX authpriv.warn pluto[1121]: adding interface ipsec0/ppp0 85.26.139.166
Nov  1 10:03:19 ER75iX authpriv.warn pluto[1121]: loading secrets from "/var/ipsec/ipsec.secrets"
Nov  1 10:03:19 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: initiating Main Mode
Nov  1 10:03:19 ER75iX authpriv.debug pluto[1121]: | no IKE algorithms for this connection
Nov  1 10:03:19 ER75iX authpriv.debug pluto[1121]: | no IKE algorithms for this connection
Nov  1 10:03:19 ER75iX authpriv.debug pluto[1121]: | no ISAKMP SA algo proposal to send -using default 3DES-MD5/SHA1
Nov  1 10:03:22 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: ERROR: asynchronous network error report on ppp0 for message to 217.66.146.20 port 500, complainant 217.66.146.20: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
Nov  1 10:03:32 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: ERROR: asynchronous network error report on ppp0 for message to 217.66.146.20 port 500, complainant 217.66.146.20: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
Nov  1 10:03:38 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: responding to Main Mode
Nov  1 10:03:38 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: transition from state (null) to state STATE_MAIN_R1
Nov  1 10:03:40 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: transition from state STATE_MAIN_R1 to state STATE_MAIN_R2
Nov  1 10:03:42 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: Peer ID is ID_IPV4_ADDR: '217.66.146.20'
Nov  1 10:03:42 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: I did not send a certificate because I do not have one.
Nov  1 10:03:42 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: transition from state STATE_MAIN_R2 to state STATE_MAIN_R3
Nov  1 10:03:42 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: sent MR3, ISAKMP SA established
Nov  1 10:03:43 ER75iX authpriv.warn pluto[1121]: "ipsec" #3: kernel algorithm does not like: no alg
Nov  1 10:03:44 ER75iX authpriv.warn pluto[1121]: "ipsec" #3: unsupported ESP Transform ESP_AES from 217.66.146.20
Nov  1 10:03:44 ER75iX authpriv.warn pluto[1121]: "ipsec" #3: kernel algorithm does not like: no alg
Nov  1 10:03:44 ER75iX authpriv.warn pluto[1121]: "ipsec" #3: unsupported ESP Transform ESP_AES from 217.66.146.20
Nov  1 10:03:44 ER75iX authpriv.warn pluto[1121]: "ipsec" #3: responding to Quick Mode
Nov  1 10:03:44 ER75iX authpriv.err pluto[1121]: ERROR: "ipsec" #3: pfkey write() of SADB_ADD message 5 for Add SA tun.1001@217.66.146.20 failed. Errno 22: Invalid argument
Nov  1 10:03:44 ER75iX authpriv.debug pluto[1121]: |   02 03 00 09  0b 00 00 00  05 00 00 00  61 04 00 00
Nov  1 10:03:44 ER75iX authpriv.debug pluto[1121]: |   03 00 01 00  00 00 10 01  00 01 00 00  00 00 00 00
Nov  1 10:03:44 ER75iX authpriv.debug pluto[1121]: |   ff ff ff ff  00 00 00 00  03 00 05 00  00 00 00 00
Nov  1 10:03:44 ER75iX authpriv.debug pluto[1121]: |   02 00 00 00  d9 42 92 14  00 00 00 00  00 00 00 00
Nov  1 10:03:44 ER75iX authpriv.debug pluto[1121]: |   03 00 06 00  00 00 00 00  02 00 00 00  55 1a 8b a6
Nov  1 10:03:44 ER75iX authpriv.debug pluto[1121]: |   00 00 00 00  00 00 00 00
Nov  1 10:03:51 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: transition from state STATE_MAIN_I1 to state STATE_MAIN_I2
Nov  1 10:03:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: I did not send a certificate because I do not have one.
Nov  1 10:03:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
Nov  1 10:03:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: Quick Mode I1 message is unacceptable because it uses a previously used Message ID 0xffe9bc9a (perhaps this is a duplicated packet)
Nov  1 10:03:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: sending encrypted notification INVALID_MESSAGE_ID to 217.66.146.20:500
Nov  1 10:03:55 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: Peer ID is ID_IPV4_ADDR: '217.66.146.20'
Nov  1 10:03:55 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: transition from state STATE_MAIN_I3 to state STATE_MAIN_I4
Nov  1 10:03:55 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: ISAKMP SA established
Nov  1 10:03:55 ER75iX authpriv.warn pluto[1121]: "ipsec" #4: initiating Quick Mode PSK+ENCRYPT+TUNNEL+UP {using isakmp#1}
Nov  1 10:04:10 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: ignoring informational payload, type INVALID_MESSAGE_ID
Nov  1 10:04:10 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: received and ignored informational message
Nov  1 10:04:14 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: Quick Mode I1 message is unacceptable because it uses a previously used Message ID 0xffe9bc9a (perhaps this is a duplicated packet)
Nov  1 10:04:14 ER75iX authpriv.warn pluto[1121]: "ipsec" #2: sending encrypted notification INVALID_MESSAGE_ID to 217.66.146.20:500
Nov  1 10:04:30 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: ignoring informational payload, type INVALID_MESSAGE_ID
Nov  1 10:04:30 ER75iX authpriv.warn pluto[1121]: "ipsec" #1: received and ignored informational message
Nov  1 10:04:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #5: kernel algorithm does not like: no alg
Nov  1 10:04:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #5: unsupported ESP Transform ESP_AES from 217.66.146.20
Nov  1 10:04:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #5: kernel algorithm does not like: no alg
Nov  1 10:04:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #5: unsupported ESP Transform ESP_AES from 217.66.146.20
Nov  1 10:04:54 ER75iX authpriv.warn pluto[1121]: "ipsec" #5: responding to Quick Mode

Никак не могу понять из этой каши, в чём именно ошибка. Объясните, пожалуйста.

Большой лог тут: http://paste.org.ru/?ajjh2q

Стартовый скрипт: http://paste.org.ru/?hdsst9

DimkaS

Ага. Кажется начинаю понимать.Ошибка

ERROR: «ipsec» #3: pfkey write() of SADB_ADD message 5 for Add SA tun.1001@217.66.146.20 failed. Errno 22: Invalid argument

случается при несовпадении версий модуля ядра и userland утилит. У меня именно так и есть: утилиты брал из пакетов debian arm, а модуль собирал из исходников с сайта openswan. Собрать утилиты из тех же исходников пока не выходит — они почему-то компилятся под i386 вместо arm. Попробую собрать новый модуль под имеющиеся утилиты.

DimkaS

Весь день разговариваю сам с собой на #openswan@irc.freenode.net. Разработчики молчат. Пересобрал libgmp для работы с software FP, собрал openswan: модуль и утилиты. Залил прошивку, запускаю — не запускается. Смотрю в логи, а там:

Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: Starting Pluto (Openswan Version 2.6.12; Vendor ID OEw[[^[pTC@N) pid:1101
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: Setting NAT-Traversal port-4500 floating to off
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]:    port floating activation criteria nat_t=0/port_float=1
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]:    including NAT-Traversal patch (Version 0.6c) [disabled]
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: using /dev/urandom as source of random entropy
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_enc(): Activating OAKLEY_TWOFISH_CBC_SSH: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_enc(): Activating OAKLEY_TWOFISH_CBC: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_enc(): Activating OAKLEY_SERPENT_CBC: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_enc(): Activating OAKLEY_AES_CBC: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_enc(): Activating OAKLEY_BLOWFISH_CBC: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_hash(): Activating OAKLEY_SHA2_512: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: ike_alg_register_hash(): Activating OAKLEY_SHA2_256: Ok (ret=0)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: starting up 1 cryptographic helpers
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1102]: using /dev/urandom as source of random entropy
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: started helper pid=1102 (fd:7)
Nov  1 14:00:29 ER75iX authpriv.warn pluto[1101]: Using KLIPS IPsec interface code on 2.6.17-emb1
Nov  1 14:00:29 ER75iX authpriv.err pluto[1101]: FATAL ERROR: /bin/lwdnsq missing or not executable. Errno 2: No such file or directory

Во-первых, я не знаю зачем этот lwdnsq нужен. Во-вторых, места для него всё равно нет. Интересно, что старый pluto сообщал только про один алгоритм: OAKLEY_AES_CBC. Новый же выдаёт целую кучу. Знать бы, где это настраивается — большая часть этого барахла мне не нужна. Скрипта ./configure нету…

DimkaS

Настраивается в Makefile.inc флагами USE_

DimkaS

Всё собралось и даже запускается без ошибок. Но пинги не ходят, соединения не устанавливаются. whack --status показывает такую картину:

000 using kernel interface: klips
000 interface ipsec0/ppp0 85.26.139.166
000 %myid = (none)
000 debug none
000  
000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=64, keysizemin=192, keysizemax=192
000 algorithm ESP encrypt: id=12, name=ESP_AES, ivlen=128, keysizemin=128, keysizemax=256
000 algorithm ESP auth attr: id=1, name=AUTH_ALGORITHM_HMAC_MD5, keysizemin=128, keysizemax=128
000 algorithm ESP auth attr: id=2, name=AUTH_ALGORITHM_HMAC_SHA1, keysizemin=160, keysizemax=160
000  
000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, blocksize=8, keydeflen=192
000 algorithm IKE encrypt: id=7, name=OAKLEY_AES_CBC, blocksize=16, keydeflen=128
000 algorithm IKE hash: id=1, name=OAKLEY_MD5, hashsize=16
000 algorithm IKE hash: id=2, name=OAKLEY_SHA1, hashsize=20
000 algorithm IKE dh group: id=2, name=OAKLEY_GROUP_MODP1024, bits=1024
000 algorithm IKE dh group: id=5, name=OAKLEY_GROUP_MODP1536, bits=1536
000 algorithm IKE dh group: id=14, name=OAKLEY_GROUP_MODP2048, bits=2048
000 algorithm IKE dh group: id=15, name=OAKLEY_GROUP_MODP3072, bits=3072
000 algorithm IKE dh group: id=16, name=OAKLEY_GROUP_MODP4096, bits=4096
000 algorithm IKE dh group: id=17, name=OAKLEY_GROUP_MODP6144, bits=6144
000 algorithm IKE dh group: id=18, name=OAKLEY_GROUP_MODP8192, bits=8192
000  
000 stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,0,0} trans={0,0,0} attrs={0,0,0}
000  
000 "ipsec": 192.168.1.0/24===85.26.139.166...217.66.146.3===192.168.2.0/24; erouted; eroute owner: #4
000 "ipsec":     myip=unset; hisip=unset; myup=/etc/init.d/updown; hisup=/etc/init.d/updown;
000 "ipsec":   ike_life: 3600s; ipsec_life: 3600s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "ipsec":   policy: PSK+ENCRYPT+TUNNEL+UP; prio: 24,24; interface: ppp0;
000 "ipsec":   newest ISAKMP SA: #1; newest IPsec SA: #4;
000 "ipsec":   IKE algorithm newest: AES_CBC_128-SHA1-MODP2048
000  
000 #4: "ipsec":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 2918s; newest IPSEC; eroute owner; isakmp#2; idle; import:not set
000 #4: "ipsec" esp.785e4d7e@217.66.146.3 esp.fb83d347@85.26.139.166 tun.1001@217.66.146.3 tun.1002@85.26.139.166
000 #2: "ipsec":500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_REPLACE in 2916s; lastdpd=-1s(seq in:0 out:0); idle; import:not set
000 #3: "ipsec":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 2376s; isakmp#1; idle; import:admin initiate
000 #3: "ipsec" esp.785e4d7f@217.66.146.3 esp.fb83d346@85.26.139.166 tun.1003@217.66.146.3 tun.1004@85.26.139.166
000 #1: "ipsec":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 2310s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:admin initiate
000

route и ping:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.1        *               255.255.255.255 UH    0      0        0 ppp0
192.168.2.0     *               255.255.255.0   U     0      0        0 ipsec0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
127.0.0.0       *               255.255.255.0   U     0      0        0 lo
default         10.0.0.1        0.0.0.0         UG    0      0        0 ppp0
# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
--- 192.168.2.1 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss

Не понимаю

DimkaS


# ifconfig ipsec0
ipsec0    Link encap:Point-to-Point Protocol  
          inet addr:85.26.139.166  Mask:255.255.255.255
          UP RUNNING NOARP  MTU:16260  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0  overruns:0 carrier:0
          collisions:0 txqueuelen:10

dropped:69 — можно как-то узнать причины дропанья?

DimkaS


# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
MASQUERADE !esp  --  anywhere             anywhere            
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Я так понимаю, что esp-трафик не маскарадится, а сразу загоняется в туннель?

DimkaS

Всё оказалось банальнее. Пинги с роутера и на роутер не проходят. А с компа в сети на комп в другой сети — вполне. Пинги, правда, немеряные — до 5 секунд, но работает.

Anarchist
DimkaS
Пинги, правда, немеряные — до 5 секунд, но работает.

Т.е. тебе банально не хватало терпения? :)

Есть мнение, что это — далеко не нормальный режим функционирования.

DimkaS
Anarchist
Т.е. тебе банально не хватало терпения? :)

Есть мнение, что это — далеко не нормальный режим функционирования.

Не совсем. Я пинговал с роутера. С него не ходили почему-то. Пинги большие, т.к. это gprs. Х.з. как оно там петляет.

Теперь другая проблема. Туннель нормально поднимается, опускается, поднимается снова. Но после разрыва ppp соединения начинают сыпаться такие сообщения:

unregister_netdevice: waiting for ppp0 to become free. Usage count = -1

Любая команда ifconfig повисает наглухо. Подять ppp соединение не удаётся. Единственное решение — перезагрузка. Никак не могу понять причину ошибки — ipsec завершается нормально, интерфейсы освобождаются… Но ppp остаётся занят.

Кстати, даже после опускания ipsec туннеля модуль ipsec нельзя удалить из ядра. lsmod говорит, что он [peranent]. Это нормально?

DimkaS

По заверениям разработчиков ошибка исправлена в openswan-2.6.18, но он не собирается :)