帶有 solaris10 的 Ipsec 隧道..我想念什麼?
我想創建一個使用 ipsec 加密的兩個 Solaris10 隧道。配置很簡單:2 個 solaris10 節點,區域網路未加密,隧道加密。LAN 是 e1000g0,隧道是 ip.tun0 Ip “clear” node1 是 192.168.0.21 Ip “clear” node2 是 192.168.0.199 我做這個程序
a)在兩個節點中啟用 ipv4 轉發和路由
routeadm -u -e ipv4-routing routeadm -u -e ipv4-forwarding
b) 在兩個節點上編輯 /etc/inet/ike/config
p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des } p2_pfs 2
c) 在兩個節點上編輯 /etc/inet/secret/ike.preshared,當然還有反向本地/遠端
{ localidtype IP localid 192.168.0.21 remoteidtype IP remoteid 192.168.0.119 }
d) 在兩個節點上啟用 IKE,svcs 確認正在工作
svcadm enable ike svcs ike
e) 編輯文件 /etc/inet/ipsecinit.conf
# LAN traffic to and from this host can bypass IPsec. {laddr 192.168.0.0 dir both} bypass {} # WAN traffic uses ESP with AES and SHA-1. {tunnel ip.tun0 negotiate tunnel} ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
f) 刷新..
svcadm refresh ipsec/policy
g) 看起來一切正常,所以我創建了隧道
svcs -a|grep -i ipsec disabled 9:35:34 svc:/network/ipsec/manual-key:default online 9:35:53 svc:/network/ipsec/ipsecalgs:default online 9:35:53 svc:/network/ipsec/ike:default online 9:54:38 svc:/network/ipsec/policy:default
在主機 A
ifconfig ip.tun0 plumb ifconfig ip.tun0 192.168.192.24 192.168.192.40 tsrc 192.168.0.21 tdst 192.168.0.199 router up
在主機 B
ifconfig ip.tun0 plumb ifconfig ip.tun0 192.168.192.40 192.168.192.24 tsrc 192.168.0.199 tdst 192.168.0.21 router up
似乎一切都好,但..不工作。
HostA可以ping通HostB
ping 192.168.0.199 192.168.0.199 is alive
HostB可以ping通HostA
ping 192.168.0.2 192.168.0.2 is alive
但是如果我ping隧道…
從 HostA 到 HostB
ping -s 192.168.192.40 PING 192.168.192.40: 56 data bytes ----192.168.192.40 PING Statistics---- 25 packets transmitted, 0 packets received, 100% packet loss
從 HostB 到 HostA
ping -s 192.168.192.24 PING 192.168.192.24: 56 data bytes ----192.168.192.24 PING Statistics---- 25 packets transmitted, 0 packets received, 100% packet loss
在 hostA netstat -rn 上說
netstat -rn Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ---------- --------- default 192.168.0.1 UG 1 1 192.168.0.0 192.168.0.21 U 1 3 e1000g0 192.168.192.40 192.168.192.24 UH 1 0 ip.tun0 224.0.0.0 192.168.0.21 U 1 0 e1000g0 127.0.0.1 127.0.0.1 UH 1 48 lo0
在 HostB 上 netstat -rn 說
Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ---------- --------- default 192.168.0.1 UG 1 2 e1000g0 192.168.0.0 192.168.0.199 U 1 7 e1000g0 192.168.192.24 192.168.192.40 UH 1 1 ip.tun0 127.0.0.1 127.0.0.1 UH 3 122 lo0
我想念什麼?防火牆在兩個節點上都被禁用。
找到的解決方案 錯誤出現在許多 conf 的語法中。文件 首先是文件
/etc/inet/ike.preshared
必須是這樣,使用的ip必須是隧道的ip而不是“主”介面的ip。
# ike.preshared on hostA #… { localidtype IP localid 10.4.0.1 remoteidtype IP remoteid 10.4.0.2 key keyinhexformat # The preshared key can also be represented in hex # as in 0xf47cb0f432e14480951095f82b # key "This is an ASCII Cqret phrAz, use str0ng p@ssword tekniques" }
要生成十六進制密鑰,請使用此命令
echo "mypassword" | od -t x1|head -1|tr -d ' '
文件
/etc/inet/ike/config
必須與此類似,即使在這種情況下使用隧道的 ip,而不是主界面的 ip。
p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des } p2_pfs 2 { label "test1-test2" local_addr 10.4.0.1 remote_addr 10.4.0.2 p1_xform { auth_method preshared oakley_group 5 auth_alg sha256 encr_alg aes } p2_pfs 5 }
當然,在 hostB 中,兩個文件都必須將 10.4.0.1 與 10.4.0.2 反向。
最後編輯文件 /etc/inet/ipsecinit.conf
{laddr 192.168.0.21 dir both} bypass {} {laddr 10.4.0.1 raddr 10.4.0.2} ipsec {encr_algs aes encr_auth_algs sha256 sa shared}
當然在 hostB 中必須將 10.4.0.1 與 10.4.0.2 反向,並且 192.168.0.21 必須與 hostB 的主機主 ip 更改
現在在 hostA 上執行腳本
ifconfig ip.tun0 unplumb ifconfig ip.tun0 plumb ifconfig ip.tun0 10.4.0.1 10.4.0.2 netmask 255.255.255.0 tsrc 192.168.0.21 tdst 192.168.0.199 router up for i in ike ipsec/policy;do svcadm refresh $i; done
現在在 hostB 上執行腳本
ifconfig ip.tun0 unplumb ifconfig ip.tun0 plumb ifconfig ip.tun0 10.4.0.2 10.4.0.1 netmask 255.255.255.0 tsrc 192.168.0.199 tdst 192.168.0.21 router up for i in ike ipsec/policy;do svcadm refresh $i; done
一切正常,用 ping 和 snoop 測試。