使用了 Open VPN 多年後,最近工作的需要,必須使用到 IPSEC來建立 site to site 的VPN。做個筆記,日後可以查閱。
點對點兩端的作業系統,預計使用 CentOS 7
1.兩地Server 建立起IPSEC VPN 連線。
2.兩地Server 內的各自User 可以直接互相訪問,不用做NAT,可直接使用User 私有IP。
先規劃一下兩地的狀況
Site A
匣道器使用 192.168.131.137 IP 上 internet
內部IP 10.10.100.1
使用者內部網段 10.10.100.0 / 24
Site B
匣道器使用 192.168.131.43 IP 上 internet
內部IP 10.10.200.1
使用者內部網段 10.10.200.0 / 24
兩端匣道器系統使用 CentOS 7,基本安裝,之後加安裝 epel-release ipsec-tools
yum install epel-release
yum install ipsec-tools
不清楚也沒研究 NetworkManager.service 跟 firewalld.service 這兩個服務, 所以我會停用。
systemctl disable NetworkManager.service
systemctl disable firewalld.service
在啟動 IPsec 連線前,核心中必須啟用 IP forwarding。
可以使用
echo “1” > /proc/sys/net/ipv4/ip_forward
也可以修改 /etc/sysctl.conf 檔案,加入 net.ipv4.ip_forward = 1 之後,執行下列指令以使變更生效:
sysctl -p /etc/sysctl.conf
設定Side A 的IPSEC1 服務器,新增一個網路設定檔 ipsec1 命名為 /etc/sysconfig/network-scripts/ifcfg-ipsec1
內容如下:
TYPE=IPSEC
ONBOOT=no
IKE_METHOD=PSK
SRCGW=10.10.100.1
DSTGW=10.10.200.1
SRCNET=10.10.100.0/24
DSTNET=10.10.200.0/24
DST=192.168.131.143
ONBOOT = yes 或 no 看實際需要
IKE_METHOD = PSK 使用預先共享金鑰的加密方法
SRCGW=10.10.100.1 來源閘道器,也就是區網 A 的閘道器 IP 位址
DSTGW=10.10.200.1 目的地的閘道器,也就是區網 B 的閘道器 IP 位址
SRCNET=10.10.100.0/24 來源網路,也就是區網 A 的網路範圍
DSTNET=10.10.200.0/24 目的地網路,也就是區網 B 的網路範圍
DST=192.168.131.143 目的地 IP 位址,也就是區網 B 可被外界存取的 IP 位址
設定預先共享金鑰 /etc/sysconfig/network-scripts/keys-ipsec1 內容格式如下:
IKE_PSK=”xY)($89koLPy”
上面這個檔兩邊SERVER 上內容必須一樣。
建立後,必須修改檔案的屬性。
chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1
接下來看連線加密的需求,調整設定檔 /etc/racoon/racoon.conf
path pre_shared_key “/etc/racoon/psk.txt”;
path certificate “/etc/racoon/certs”;
path script “/etc/racoon/scripts”;sainfo anonymous
{
#pfs_group 2;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_md5 ;
compression_algorithm deflate ;
}remote anonymous
{
exchange_mode main;
my_identifier address;
peers_identifier address;
lifetime time 24 hour ;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key ;
dh_group 2 ;
}}
include “/etc/racoon/192.168.131.143.conf”;
請注意在檔案底部的 include 那一行只與 IPsec 穿隧連線時才會出現,因為它是在 IPsec 連線每次啟動時自動產生的。
以上為Side A 伺服器上設定的方式,接下來設定 Side B
設定Side B 的IPSEC2 服務器,新增一個網路設定檔 ipsec2 命名為 /etc/sysconfig/network-scripts/ifcfg-ipsec2
內容如下:
TYPE=IPSEC
ONBOOT=no
IKE_METHOD=PSK
SRCGW=10.10.200.1
DSTGW=10.10.100.1
SRCNET=10.10.200.0/24
DSTNET=10.10.100.0/24
DST=192.168.131.137
設定預先共享金鑰 /etc/sysconfig/network-scripts/keys-ipsec2 內容格式如下:
IKE_PSK=”xY)($89koLPy”
上面這個檔兩邊SERVER 上內容必須一樣。
建立後,必須修改檔案的屬性。
chmod 600 /etc/sysconfig/network-scripts/keys-ipsec2
按需求,調整設定檔 /etc/racoon/racoon.conf
===========以上為兩邊伺服器設定的內容============
接著說明如何啟動及關閉IPSEC 連線。
IPSEC1 上面
啟動: 使用 ifup ipsec1
關閉: 使用 ifdown ipsec1IPSEC2 上面
啟動: 使用 ifup ipsec2
關閉: 使用 ifdown ipsec2
如要測試 IPsec 連線,請在外部可存取的裝置上(此例為 ens33)執行 tcpdump 工具程式,來檢視在主機(或網路間)傳輸的網路封包,並且檢驗它們是否已經經由 IPsec 進行 加密。 例如,如要檢查區網 A 的 IPsec 連線狀況,請輸入下列指令:
tcpdump -nn -i ens33 host 192.168.131.143
封包中應該含有一個 AH 表頭,而且必須是一個 ESP 封包。 ESP 表示該封包已經加密過了。 例如(反斜線代表指令行的繼續):
12:24:26.155529 192.168.131.137 > 192.168.131.143: AH(spi=0x021c9834,seq=0x358): \
192.168.131.143 > 192.168.131.137: ESP(spi=0x00c887ad,seq=0x358) (DF) \
(ipip-proto-4)
這個IPSEC 的連線使用到那些PORT 口跟通訊協定呢?
Protocol: UDP, port 500 (for IKE, to manage encryption keys)
Protocol: UDP, port 4500 (for IPSEC NAT-Traversal mode)
Protocol: ESP, value 50 (for IPSEC)
Protocol: AH, value 51 (for IPSEC)
所以在防火牆上必須放行這些協定及Port口
iptables -A INPUT -i $EXT_NIC -p udp –dport 500 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p udp –dport 4500 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p 50 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p 51 -j ACCEPT
$EXT_NIC表示IPSEC主機上對外上網的網卡,在這個例子中為 ens33
以上是小瑞設定IPSEC 的筆記,希望對大家有幫助。