Solaris

帶有 solaris10 的 Ipsec 隧道..我想念什麼?

  • February 19, 2019

我想創建一個使用 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 測試。

引用自:https://unix.stackexchange.com/questions/501127