网络拓扑
|-------------------| |-------------------|
| | | |
| 192.168.1.115 | <---------> | 192.168.1.142 |
| | | |
|-------------------| |-------------------|
配置192.168.1.115
创建xfrm的state,即IPSec定义的安全关联数据库(Security Association DataBase)。md5哈希算法的秘钥长度为16字节,3DES加密算法秘钥长度为24字节。可选择的哈希算法还有:sha1、sha256和sha384等,可选的加密算法有:aes、twofish等。以下创建两个方向的SA。
$ sudo ip xfrm state add src 192.168.1.115 dst 192.168.1.142 proto esp spi 0x00000301 mode tunnel auth md5 0x8896ab8654cd9875e214a978bd31209f enc des3_ede 0xea89273861739abc9e0d527ad98462108365289dcb1a6738
$
$ sudo ip xfrm state add src 192.168.1.142 dst 192.168.1.115 proto esp spi 0x00000302 mode tunnel auth md5 0x8ab2639471536c8d92a0e82618e92ac7 enc des3_ede 0xec91728a907c6d526178493027139dce56473926ac947289
以下命令查看创建的SA,使用命令ip xfrm state list可查看全部的state列表。
$ sudo ip xfrm state get src 192.168.1.115 dst 192.168.1.142 proto esp spi 0x00000301
src 192.168.1.115 dst 192.168.1.142
proto esp spi 0x00000301 reqid 0 mode tunnel
replay-window 0
auth-trunc hmac(md5) 0x8896ab8654cd9875e214a978bd31209f 96
enc cbc(des3_ede) 0xea89273861739abc9e0d527ad98462108365289dcb1a6738
anti-replay context: seq 0x0, oseq 0x0, bitmap 0x00000000
sel src 0.0.0.0/0 dst 0.0.0.0/0
$
$ sudo ip xfrm state get src 192.168.1.142 dst 192.168.1.115 proto esp spi 0x00000302
src 192.168.1.142 dst 192.168.1.115
proto esp spi 0x00000302 reqid 0 mode tunnel
replay-window 0
auth-trunc hmac(md5) 0x8ab2639471536c8d92a0e82618e92ac7 96
enc cbc(des3_ede) 0xec91728a907c6d526178493027139dce56473926ac947289
anti-replay context: seq 0x0, oseq 0x0, bitmap 0x00000000
sel src 0.0.0.0/0 dst 0.0.0.0/0
以下创建两个方向的IPSec安全策略,即Security Policy DataBase。指定采用ESP协议,内核同时也支持AH协议。模式指定为隧道tunnel模式,其它支持的模式有:传输模式transport、Bound End-to-End Tunnel隧道模式 (beet),以及应用与IPv6的route optimization和inbound trigger模式。
$ sudo ip xfrm policy add src 192.168.1.115 dst 192.168.1.142 dir out ptype main tmpl src 192.168.1.115 dst 192.168.1.142 proto esp mode tunnel
$ sudo ip xfrm policy add src 192.168.1.142 dst 192.168.1.115 dir in ptype main tmpl src 192.168.1.142 dst 192.168.1.115 proto esp mode tunnel
查看安全策略的配置
$ sudo ip xfrm policy ls
src 192.168.1.142/32 dst 192.168.1.115/32
dir in priority 0
tmpl src 192.168.1.142 dst 192.168.1.115
proto esp reqid 0 mode tunnel
src 192.168.1.115/32 dst 192.168.1.142/32
dir out priority 0
tmpl src 192.168.1.115 dst 192.168.1.142
proto esp reqid 0 mode tunnel
配置192.168.1.142
配置192.168.1.142两个方向的安全关联,内容必须与以上的192.168.1.115的安全关联完全一致。
$ sudo ip xfrm state add src 192.168.1.115 dst 192.168.1.142 proto esp spi 0x00000301 mode tunnel auth md5 0x8896ab8654cd9875e214a978bd31209f enc des3_ede 0xea89273861739abc9e0d527ad98462108365289dcb1a6738
$
$ sudo ip xfrm state add src 192.168.1.142 dst 192.168.1.115 proto esp spi 0x00000302 mode tunnel auth md5 0x8ab2639471536c8d92a0e82618e92ac7 enc des3_ede 0xec91728a907c6d526178493027139dce56473926ac947289
以下命令查看配置内容。
$ sudo ip xfrm state get src 192.168.1.115 dst 192.168.1.142 proto esp spi 0x00000301
src 192.168.1.115 dst 192.168.1.142
proto esp spi 0x00000301 reqid 0 mode tunnel
replay-window 0
auth-trunc hmac(md5) 0x8896ab8654cd9875e214a978bd31209f 96
enc cbc(des3_ede) 0xea89273861739abc9e0d527ad98462108365289dcb1a6738
sel src 0.0.0.0/0 dst 0.0.0.0/0
$
$ sudo ip xfrm state get src 192.168.1.142 dst 192.168.1.115 proto esp spi 0x00000302
src 192.168.1.142 dst 192.168.1.115
proto esp spi 0x00000302 reqid 0 mode tunnel
replay-window 0
auth-trunc hmac(md5) 0x8ab2639471536c8d92a0e82618e92ac7 96
enc cbc(des3_ede) 0xec91728a907c6d526178493027139dce56473926ac947289
sel src 0.0.0.0/0 dst 0.0.0.0/0
对于安全策略的配置,此处与192.168.1.115的配置唯一的区别是数据流的方向,之前的in现在为out,之前的out现在为in,参见dir参数的值。其它的配置完全一致。
$ sudo ip xfrm policy add src 192.168.1.115 dst 192.168.1.142 dir in ptype main tmpl src 192.168.1.115 dst 192.168.1.142 proto esp mode tunnel
$ sudo ip xfrm policy add src 192.168.1.142 dst 192.168.1.115 dir out ptype main tmpl src 192.168.1.142 dst 192.168.1.115 proto esp mode tunnel
检查安全策略的配置。
$ sudo ip xfrm policy ls
src 192.168.1.142/32 dst 192.168.1.115/32
dir out priority 0 ptype main
tmpl src 192.168.1.142 dst 192.168.1.115
proto esp reqid 0 mode tunnel
src 192.168.1.115/32 dst 192.168.1.142/32
dir in priority 0 ptype main
tmpl src 192.168.1.115 dst 192.168.1.142
proto esp reqid 0 mode tunnel
测试连通性
在192.168.1.142上执行ping操作。
$ ping 192.168.1.115
PING 192.168.1.115 (192.168.1.115) 56(84) bytes of data.
64 bytes from 192.168.1.115: icmp_seq=1 ttl=64 time=0.186 ms
64 bytes from 192.168.1.115: icmp_seq=2 ttl=64 time=0.149 ms
使用tcpdump在192.168.1.115上抓包。
$ sudo tcpdump -i any -p esp -en
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
20:51:21.557161 In 00:0c:29:69:5d:54 ethertype IPv4 (0x0800), length 152: 192.168.1.142 > 192.168.1.115: ESP(spi=0x00000302,seq=0x21), length 116
20:51:21.557321 Out 00:0c:29:de:95:00 ethertype IPv4 (0x0800), length 152: 192.168.1.115 > 192.168.1.142: ESP(spi=0x00000301,seq=0x21), length 116
清空配置
情况安全关联和策略。
$ sudo ip xfrm state flush
$ sudo ip xfrm policy flush