PIX 515 7.0 site-to-site VPN 設定除錯記

喔! PIX 515已經是老古董了, 我由PIX 515用到現在ASA系列, 其軟體版本則由6.3, 7.x, 到現在的8.x。每一個版本的設定指令都有很大的改變, 不花些時間去看, 真的會看不懂。記得第一次使用時, 還買了一本5.x的中文書, 雖然和當時手上的6.3版已經有些許不同, 但入門的觀念和基本指令還是差不多, 很有幫助, 可惜後來借給同事後, 就不知道跑去那了。
最近則是把老機器拿出來用, 這代的PIX和第一代的ASA是同期的產品, 其軟體版本都是7.x, 所以大部份指令都是相同的。
要設定site-to-site VPN有兩個方法, 一是使用指令(CLI), 另一個方式則是使用web界面。簡單情況下, 使用web界面的方式較容易, 也比較不會出錯。但是使用指令可以做到細部的修改, 這可不是web界面的精靈能幫得上忙的。不過, 也比較容易出錯就是。我在這次的設定中是使用指令方式, 也因此出了一些錯, 所以找錯的方法和過程, 倒也值得記錄一下。

目的: 在A及B兩個LAN之間, 使用PIX, 建立一個VPN Tunnel
狀況: 每個LAN都有透過ISP提供的乙太專線上外網, 內外網之間則架有PIX當防火牆

A LAN的PIX設定:
# sh run
: Saved
:
PIX Version 7.0(1)
names
!
interface Ethernet0
 nameif outside
 security-level 0
 ip address A.A.A.A 255.255.255.240
!
interface Ethernet1
 nameif inside
 security-level 100
 ip address x.x.x.x 255.255.0.0
!
interface Ethernet2
 shutdown
 no nameif
 no security-level
 no ip address
!
boot system flash:/image
ftp mode passive
clock timezone Taipei 8
access-list inside_nat0_outbound extended permit ip x.x.0.0 255.255.0.0 y.y.0.0 255.255.0.0
access-list acl_out extended permit icmp any any
access-list outside_cryptomap_10 extended permit ip x.x.0.0 255.255.0.0 y.y.0.0 255.255.0.0
pager lines 24
logging enable
logging buffered debugging
mtu outside 1500
mtu inside 1500
monitor-interface outside
monitor-interface inside
asdm history enable
arp timeout 14400
nat-control
global (outside) 1 interface
nat (inside) 1 x.x.0.0 255.255.0.0
access-group acl_out in interface outside
route outside 0.0.0.0 0.0.0.0 A.A.A.G 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00
timeout mgcp-pat 0:05:00 sip 0:30:00 sip_media 0:02:00
timeout uauth 0:05:00 absolute
aaa-server TACACS+ protocol tacacs+
aaa-server RADIUS protocol radius
http 10.1.0.0 255.255.0.0 inside
no snmp-server location
no snmp-server contact
snmp-server community public
snmp-server enable traps snmp
crypto ipsec transform-set ESP-AES-256-SHA esp-aes-256 esp-sha-hmac
crypto map mymap 10 match address outside_cryptomap_10
crypto map mymap 10 set peer B.B.B.B
crypto map mymap 10 set transform-set ESP-AES-256-SHA
crypto map mymap interface outside
isakmp enable outside
isakmp policy 10 authentication pre-share
isakmp policy 10 encryption aes-256
isakmp policy 10 hash sha
isakmp policy 10 group 5
isakmp policy 10 lifetime 86400
isakmp policy 20 authentication pre-share
isakmp policy 20 encryption 3des
isakmp policy 20 hash sha
isakmp policy 20 group 2
isakmp policy 20 lifetime 86400
telnet timeout 5
ssh C.C.C.C 255.255.255.240 outside
ssh x.x.0.0 255.255.0.0 inside
ssh timeout 60
ssh version 2
console timeout 0
tunnel-group B.B.B.B type ipsec-l2l
tunnel-group B.B.B.B ipsec-attributes
 pre-shared-key *
ntp server 59.124.196.84 source outside
ntp server 59.124.196.85 source outside
ntp server 220.130.158.72 source outside
ntp server 220.130.158.71 source outside prefer
: end
 B LAN的PIX設定:
# sh run
: Saved
:
PIX Version 7.0(1)
names
!
interface Ethernet0
 nameif outside
 security-level 0
 ip address B.B.B.B 255.255.255.224
!
interface Ethernet1
 nameif inside
 security-level 100
 ip address y.y.y.y 255.255.240.0
!
ftp mode passive
clock timezone Taipei 8
access-list acl_out extended permit icmp any any
access-list inside_nat0_outbound extended permit ip y.y.0.0 255.255.0.0 x.x.0.0 255.255.0.0
access-list outside_cryptomap_40 extended permit ip y.y.0.0 255.255.0.0 x.x.0.0 255.255.0.0
pager lines 23
logging enable
logging buffered debugging
logging asdm informational
mtu outside 1500
mtu inside 1500
monitor-interface outside
monitor-interface inside
asdm image flash:/asdm
no asdm history enable
arp timeout 14400
global (outside) 1 interface
nat (inside) 0 access-list inside_nat0_outbound
nat (inside) 1 y.y.0.0 255.255.0.0
access-group acl_out in interface outside
route outside 0.0.0.0 0.0.0.0 B.B.B.G 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00
timeout mgcp-pat 0:05:00 sip 0:30:00 sip_media 0:02:00
timeout uauth 0:05:00 absolute
aaa-server TACACS+ protocol tacacs+
aaa-server RADIUS protocol radius
http server enable
no snmp-server location
no snmp-server contact
snmp-server community public
snmp-server enable traps snmp
crypto ipsec transform-set ESP-AES-256-SHA esp-aes-256 esp-sha-hmac
crypto map outside_map 40 match address outside_cryptomap_40
crypto map outside_map 40 set peer A.A.A.A
crypto map outside_map 40 set transform-set ESP-AES-256-SHA
crypto map outside_map interface outside
isakmp enable outside
isakmp policy 10 authentication pre-share
isakmp policy 10 encryption aes-256
isakmp policy 10 hash sha
isakmp policy 10 group 5
isakmp policy 10 lifetime 86400
ssh C.C.C.C 255.255.255.240 outside
ssh y.y.0.0 255.255.0.0 inside
ssh timeout 60
console timeout 0
tunnel-group A.A.A.A type ipsec-l2l
tunnel-group A.A.A.A ipsec-attributes
 pre-shared-key *
ntp server 59.124.196.84 source outside
ntp server 59.124.196.85 source outside
ntp server 220.130.158.72 source outside
ntp server 220.130.158.71 source outside prefer
: end
我把一些不相關的設定拿掉了, 所以設定看起來少了一些(其實還是很多)。有一些看似不相關的設定我沒有拿掉, 例如ntp, timezone等, 其實這些是基本設定, 還是要先設好, 否則兩台PIX的時間差太多, 可能在交換加解密參數時會出問題。還有對外的routing一定要先設好, 否則封包都出不了外網, VPN也不可能設的起來。所以就留下這些設定了。
不要去算有幾行了, 至少有兩頁吧! 心理學家做過一個實驗, 人一眼看過去, 立刻可以分辨出一個或兩個或三個或四個蘋果; 但如果桌上一直線擺了30個蘋果, 有人可以一眼看過去, 不用數, 就可以很肯定說出有30個, 而不是31個或29個嗎? 心理學家還沒有找到這種超人。
我只是告訴大家, 這種設定方式, 所有人都會眼花瞭亂, 此為人之常情。
而且, 這算是最單純的兩點設定, 實務上, 三點或四點或五點也是司空見慣的。可以想見那個設定檔會是多長的。
好, 兩個PIX都設好了, 在這兩個LAN再各找一台電腦, 把其Gateway都各自指向自己的PIX。並且試著PING各自的PIX都成功, 再PING外網(例如, 168.95.1.1)也都成功。那麼, 就表示這兩台電腦的網路設定都沒什麼問題, 可通內網也可通外網了。
接下來, 直接兩台電腦互PING, 都PING彼此的內網IP, 例如x.x.1.1 ping y.y.2.2; 而y.y.2.2 ping x.x.1.1。

結果不會通, ping 不到。哇, 以前照著手冊, 只要這些設定都有做就會通, 現在不會通要找問題, 怎麼找呢?

手冊有提到一個指令:
#conf t
(conf t)# debug icmp trace

可以看到ping的封包有沒有到PIX,
所以先把兩個PIX的debug icmp trace都打開。
結果發現B LAN那邊電腦的ping request封包, 有到B PIX, 也有到A PIX。但是A LAN這邊電腦的ping request封包只到A PIX, 並沒有到B PIX。由此推斷是A PIX的問題比較大, 一種可能是封包到A PIX就過不去了。

所以在A PIX把log 打開:
#conf t
(conf t)# logging enable
(conf t)# logging buffered debugging

果然看到有建立ICMP連線的訊息, 然後又中斷ICMP連線的訊息, 中間夾著一個訊息:
no translation group found for icmp src .......

上網找一下, 有人提到類似的問題, 而且和NAT 0有相關。這給了我一個想法,可能在A PIX,因為某種原因,我的NAT 0設定不見了。前往檢查一下,果然如此。

nat (inside) 0 access-list inside_nat0_outbound

這個設定在A PIX上不見了,但在B PIX是存在的。而我也記得當時設定時在A PIX有加入這個設定。啊,想來,後來有修改access-list inside_nat0_outbound,而且是先把所有access-list都no掉,然後再加入正確的access-list。極有可能在此時,因為access-list inside_nat0_outbound已經不存在了,所以這個NAT 0產生了相依性問題,它所相依的access-list不存在了,所以自己也無法存在,此時PIX自動把NAT 0刪掉。似乎PIX 7.x會有這個問題(要說是它聰明呢?還是自作聰明?)。印象中記得6.x版的不會這樣,它比較像是在編輯文檔,你說要改的才改,不會自動刪東西,即使有相依性問題,也會留著。你說那個行為好?

果然,在A PIX加入這行NAT 0 的設定後,兩台電腦互相PING都可以成功了。



留言

這個網誌中的熱門文章

D-BUS學習筆記

Cisco Switch學習筆記: EtherChannel

Cisco Switch學習筆記: interface的封包錯誤統計