LINUX.ORG.RU
ФорумAdmin

IPSEC, nat, racoon and dynamic ip


0

0

Есть два вопроса, первый:
Существует ipsec тунель между 192.168.108.1 (он за nat-t) и 195.122.245.xxx

Вот правила sad/spd с первого хоста (на втором они генерируются автоматически):

spdadd 192.168.108.1 192.168.1.0/24 any -P out ipsec 
esp/tunnel/192.168.108.1-195.122.245.xxx/require;
spdadd 192.168.1.0/24 192.168.108.1 any -P in ipsec 
esp/tunnel/195.122.245.xxx-192.168.108.1/require;

Со стороны 192.168.108.1 сеть 192.168.1.0/24 видно отлично:
~$ping -c 1 192.168.1.254 
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=193 ms

--- 192.168.1.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 193.186/193.186/193.186/0.000 ms

Но со стороны 192.168.1.254 хост 192.168.108.1 не видно, вместо 
этого хост 192.168.1.254 отсылает пакеты к 192.168.108.1 через 
default route:

spirit@nat:~$ ping -c 1 192.168.108.1
PING 192.168.108.1 (192.168.108.1) 56(84) bytes of data.
From 194.190.177.xxx icmp_seq=1 Destination Host Unreachable

--- 192.168.108.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

Так вот, почему это происходит? Есть предположение что это из-за автоматической 
генерации sad/spd.
Есть какие-то предположение в чём дело и как лечить?

Вот dump setkey, хост 192.168.108.1 (тот который за nat):

Ghost:/home/spirit# setkey -DP
192.168.1.0/24[any] 192.168.108.1[any] any
	in ipsec
	esp/tunnel/195.122.245.xxx-192.168.108.1/require
	created: May  4 21:57:48 2008  lastused: May  4 23:01:18 2008
	lifetime: 0(s) validtime: 0(s)
	spid=192 seq=1 pid=10633
	refcnt=2
192.168.108.1[any] 192.168.1.0/24[any] any
	out ipsec
	esp/tunnel/192.168.108.1-195.122.245.xxx/require
	created: May  4 21:57:48 2008  lastused: May  4 23:04:13 2008
	lifetime: 0(s) validtime: 0(s)
	spid=185 seq=2 pid=10633
	refcnt=787
192.168.1.0/24[any] 192.168.108.1[any] any
	fwd ipsec
	esp/tunnel/195.122.245.xxx-192.168.108.1/require
	created: May  4 21:57:48 2008  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=202 seq=3 pid=10633
	refcnt=1
(per-socket policy) 
	in none
	created: May  4 22:59:25 2008  lastused: May  4 22:59:50 2008
	lifetime: 0(s) validtime: 0(s)
	spid=259 seq=4 pid=10633
	refcnt=1
(per-socket policy) 
	in none
	created: May  4 22:59:25 2008  lastused: May  4 23:01:18 2008
	lifetime: 0(s) validtime: 0(s)
	spid=243 seq=5 pid=10633
	refcnt=1
(per-socket policy) 
	out none
	created: May  4 22:59:25 2008  lastused: May  4 22:59:50 2008
	lifetime: 0(s) validtime: 0(s)
	spid=268 seq=6 pid=10633
	refcnt=1
(per-socket policy) 
	out none
	created: May  4 22:59:25 2008  lastused: May  4 23:00:50 2008
	lifetime: 0(s) validtime: 0(s)
	spid=252 seq=0 pid=10633
	refcnt=1


Хост 195.122.245.XXX:

79.126.16.xxx - хост осуществляющий nat.

[nat]:/home/spirit#setkey -DP                  
192.168.108.1[any] 192.168.1.0/24[any] any
	in ipsec
	esp/tunnel/79.126.16.xxx-195.122.245.xxx/require
	created: May  4 22:55:44 2008  lastused: May  4 22:59:31 2008
	lifetime: 18000(s) validtime: 0(s)
	spid=432 seq=6 pid=26639
	refcnt=3
192.168.1.0/24[any] 192.168.108.1[any] any
	out ipsec
	esp/tunnel/195.122.245.xxx-79.126.16.xxx/require
	created: May  4 22:55:44 2008  lastused: May  4 22:59:31 2008
	lifetime: 18000(s) validtime: 0(s)
	spid=449 seq=5 pid=26639
	refcnt=3
192.168.108.1[any] 192.168.1.0/24[any] any
	fwd ipsec
	esp/tunnel/79.126.16.xxx-195.122.245.xxx/require
	created: May  4 22:55:44 2008  lastused: May  4 23:01:06 2008
	lifetime: 18000(s) validtime: 0(s)
	spid=442 seq=4 pid=26639
	refcnt=436
(per-socket policy) 
	in none
	created: May  4 22:53:36 2008  lastused: May  4 22:55:43 2008
	lifetime: 0(s) validtime: 0(s)
	spid=419 seq=3 pid=26639
	refcnt=1
(per-socket policy) 
	in none
	created: May  4 22:53:36 2008  lastused: May  4 23:01:06 2008
	lifetime: 0(s) validtime: 0(s)
	spid=403 seq=2 pid=26639
	refcnt=1
(per-socket policy) 
	out none
	created: May  4 22:53:36 2008  lastused: May  4 22:55:43 2008
	lifetime: 0(s) validtime: 0(s)
	spid=428 seq=1 pid=26639
	refcnt=1
(per-socket policy) 
	out none
	created: May  4 22:53:36 2008  lastused: May  4 22:56:43 2008
	lifetime: 0(s) validtime: 0(s)
	spid=412 seq=0 pid=26639
	refcnt=1


Вопрос второй:
Мало того что первый хост находится за nat, так в добавок к этому у nat'ящего хоста м
еняется внешний ip (собственно это adsl модем).
В силу этого хост который находится в пассивном режиме (у него статический ip) был 
настроен так, чтобы sad/spd генерировались автоматически.
Всё бы хорошо, только если модем меняет внешний ip на втором хосте в log файл попадает 
такая ошибка:


2008-05-04 22:56:48: INFO: purging ISAKMP-SA spi=26d39985a81b4108:6626dabdc45044
15.
2008-05-04 22:56:48: INFO: purged ISAKMP-SA spi=26d39985a81b4108:6626dabdc450441
5.
2008-05-04 22:56:49: INFO: ISAKMP-SA deleted 195.122.245.185[4500]-79.126.16.174
[4500] spi:26d39985a81b4108:6626dabdc4504415
2008-05-04 22:56:49: INFO: KA remove: 195.122.245.185[4500]->79.126.16.174[4500]
2008-05-04 22:57:15: INFO: unsupported PF_KEY message X_NAT_T_NEW_MAPPING
2008-05-04 22:57:16: INFO: unsupported PF_KEY message X_NAT_T_NEW_MAPPING
2008-05-04 22:57:17: INFO: unsupported PF_KEY message X_NAT_T_NEW_MAPPING



Можно ли это как-то победить?

Конфиги, хост 192.168.108.1:

path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
#log debug2;

listen {
   isakmp 192.168.108.1 [500];
   isakmp_natt 192.168.108.1 [4500];
}

timer {
   phase1 10 sec;
   phase2 20 sec;
}


remote 195.122.245.XXX {
   exchange_mode main;
   doi ipsec_doi;
   nat_traversal on;
   certificate_type x509 "ghost.pub" "ghost.priv";
   my_identifier asn1dn;
   peers_certfile "nat.public";
   send_cert on;
   send_cr on;
   initial_contact on;
   passive off;
   dpd_delay 10;
   proposal_check obey;
   proposal {
      encryption_algorithm aes;
      hash_algorithm sha1;
      authentication_method rsasig;
      dh_group 2;
   }
}

sainfo anonymous {
   pfs_group 2;
   lifetime time 5 hour;
   encryption_algorithm aes, twofish, blowfish, 3des;
   authentication_algorithm hmac_sha1;
   compression_algorithm deflate;
}

Конфиг второго хоста:

path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";


listen {
isakmp 195.122.245.XXX[500];
isakmp_natt 195.122.245.XXX[4500];
}

timer {
        natt_keepalive 30 sec;
}

remote anonymous {
        exchange_mode main;
        doi ipsec_doi;
        nat_traversal on;
        certificate_type x509 "nat.public" "nat.cert";
        my_identifier asn1dn;
        peers_certfile x509 "ghost.pub";
        send_cert on;
        send_cr on;
        initial_contact off;
        passive on;
        dpd_delay 10;
        proposal_check obey;
        generate_policy on;
        proposal {
                encryption_algorithm aes;
                hash_algorithm sha1;
                authentication_method rsasig;
                dh_group 2;
        }
}

sainfo anonymous {
        pfs_group 2;
        lifetime time 5 hour;
        encryption_algorithm aes, twofish, blowfish, 3des;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate;
}

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

Да я видел краем глаза конфиги и описание road warrior, я так понял что он реализует сессию (чем-то похожую на ppp подключение), возможно это сможет решить вторую проблему или да же обе, почитаю. Пока есть подозрение что в случаи когда меняется внешний ip придётся заново комманду на подключение. На данный момент случайно обнаружил, что по истечению lifetime поломанная сессия корректно уничтожается после чего возможно создать новую, надо посмотреть сколько занимает по времени установление новой сессии если не много, возможно что просто сделаю lifetime минут 5-10.

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