1. OpenSWan介紹
1.1 OpenSWan概述
OpenSWan是linux選Ipsec及I2tp協議的一個不錯的實現方案。他支持和ipsec相關的大多數的擴展(RFC+IETF drafts)。Openswan項目起源於FreeS/WAN 2.04項目,該項目的功能很強大,可以很大程度上保證數據在跨網傳輸中的安全性、完整性,特別是通過它,餓哦沒可以很好地實現跨機房或異地辦公場所實現局域網互聯解決方案,如果和open***工具配合,可以實現將注入門戶網站的多機房互訪及***的各種強大解決方案
OpenSWan也並不都是優點,首先,其官方社區還不完善,官方文檔信息比較少
大中型企業最需要的方案-------跨公網實現多個機房通過局域網互聯的重要生產應用場景(network-to-network or sete-to-site)
OpenSWan由三個主要組件構成
a.配置工具(ipsec命令腳本)
b.Key管理工具(pluto)
c.內核組件(KLIPS/26sec)
更多的openswan信息可查看軟件包下面的INSTALL、README、DOCS。
2. 安裝環境與主機規劃
主機名 | 網卡eth0(外網) | 網卡eth1(內網) | 默認網關 | 用途 |
Lserver1 | 192.168.1.80 | 192.168.2.80 | 192.168.1.1 | Left1網關 |
Rserver1 | 192.168.1.81 | 192.168.3.81 | 192.168.1.1 | |
Lclient1 | 192.168.2.180 | 192.168.2.80 | Left1客戶機 | |
Rclient1 | 192.168.3.181 | 192.168.3.81 | Right1客戶機 |
1)提示:Lserver1和Rserver1可以互相ping通
2)Lclient可以ping通Lserver1,甚至可以ping通Rserver1的外網卡
3)Rclient可以ping通Rclient
4)Lclient可以ping通rserver1,同時可以ping通lserver1
5)lclient不能和rclient1互通。
6)最終目的就是lclient能和rclient1互通
1)在部署前進行主機規劃的意義非常重大,它可以讓我們思路清晰,避免走冤枉路
2)如無特殊說明,上述規劃中的子網掩碼均爲24位
3)上述中L表示left,R表示right
生產環境網段劃分
2.2 檢查主機間的連接是否正常
7)Lserver1和Rserver1可以互相ping通
8)Lclient可以ping通Lserver1,甚至可以ping通Rserver1的外網卡
9)Rclient可以ping通Rclient
10)Lclient可以ping通rserver1,同時可以ping通lserver1
11)lclient不能和rclient1互通。
12)最終目的就是lclient能和rclient1互通
3. 安裝技術軟件及配置系統參數
3.1 安裝基礎軟件包
yum -y install ipsec-tools
yum -y install gmp gmp-devel gawk flex bison
3.2 檢查安裝的基礎軟件包
rpm -aq gmp gmp-devel gawk flex bison ipsec-tools
3.3 配置內核參數
cp /etc/sysctl.conf /etc/sysctl.conf.$(date +%F)
sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print $1 "=0"}' >> /etc/sysctl.conf
強調:如果不進行內核調優,後面會出現問題
sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g ' /etc/sysctl.conf
sed -i 's#net.ipv4.conf.default.rp_filter = 1#net.ipv4.conf.default.rp_filter = 0#g ' /etc/sysctl.conf
egrep "rp_filter|forward" /etc/sysctl.conf
sysctl -p
4. 安裝OpenSwan軟件
4.1 下載編譯並安裝
wget https://download.openswan.org/openswan/openswan-2.6.40.tar.gz
mkdir -p /home/yan/tools
cd /home/yan/tools
tar -xf openswan-2.6.40.tar.gz
cd openswan-2.6.40
make programs
make install
4.2 驗證安裝結果
[root@Lserver1 ~]# ipsec --version
Linux Openswan U2.6.40/K(no kernel code presently loaded)
See `ipsec --copyright' for copyright information.
[root@Lserver1 ~]# ipsec verify
4.3 啓動服務
/etc/init.d/ipsec start
ipsec_setup: Starting Openswan IPsec 2.6.40...
ipsec_setup: No KLIPS support found while requested, desperately falling back to netkey
ipsec_setup: NETKEY support found. Use protostack=netkey in /etc/ipsec.conf to avoid attempts to use KLIPS. Attempting to continue with NETKEY
4.4 檢查服務
[root@Lserver1 ~]# /etc/init.d/ipsec status
IPsec running - pluto pid: 15141
pluto pid 15141
No tunnels up
[root@Lserver1 ~]# ipsec verify
Checking if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Openswan U2.6.40/K2.6.32-431.el6.x86_64 (netkey)
See `ipsec --copyright' for copyright information.
Checking for IPsec support in kernel [OK]
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [OK]
ICMP default/accept_redirects [OK]
XFRM larval drop [OK]
Hardware random device check [N/A]
Two or more interfaces found, checking IP forwarding[OK]
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth1/rp_filter [ENABLED]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE on tcp 500 [NOT IMPLEMENTED]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto listening for IKE/NAT-T on tcp 4500 [NOT IMPLEMENTED]
Pluto listening for IKE on tcp 10000 (cisco) [NOT IMPLEMENTED]
Checking NAT and MASQUERADEing [TEST INCOMPLETE]
Checking 'ip' command [IP XFRM BROKEN]
Checking 'iptables' command [OK]
解決方法:
echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
4.5 查看pluto端口
[root@Rserver1 ~]# netstat -ntlpu | grep pluto
udp 0 0 127.0.0.1:500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.1.81:500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.3.81:500 0.0.0.0:* 29543/pluto
udp 0 0 127.0.0.1:4500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.1.81:4500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.3.81:4500 0.0.0.0:* 29543/pluto
udp 0 0 ::1:500 :::* 29543/pluto
5. 配置OpenSwan
5.1 Openswan主要配置文件
/etc/ipsec.secrets用來保存private RSA keys 和 preshared secrets (PSKs)
/etc/ipsec.confOpenSWan主要配置文件(settings, options, defaults, connections)
5.2 Openswan主要配置說明
/etc/ipsec.d/cacerts存放X.509認證證書
/etc/ipsec.d/certs存放X.509客戶端證書
/etc/ipsec.d/crls存放X.509證書撤銷文件
/etc/ipsec.d/private存放X.509認證私鑰
/etc/ipsec.d/ocspcerts存放X.509 OCSP證書
/etc/ipsec.d/policies存放Opportunistic Encryption 策略組
5.3 OpenSWan連接方式
1)Network-to-Network
條件:
每個子網各自擁有一臺安裝有Openswan的主機作爲其子網的出口網關
每個子網的IP段不能有疊加
2)Road Warrior方式
當使用Network-to-Network方式時,作爲每個子網網關的之際不能像子網內部主機那樣透明訪問遠程子網的之際,也就是說:如果你是一個使用筆記本電腦的移動用戶,經常出差或是在不同的地點辦公,你的PC將不能用Network-to-Network方式與公司網絡進行連接。
Road Warrior方式正是爲這種情況而設計的,連接建立後,你的pc就可以鏈接到遠程的網絡了
5.4 使用RSA數字簽名(RSASIG)認證方式配置openswan
1)在Lserver1、Rserver1上分別生成新的hostkeys
備份:
cp /etc/ipsec.secrets /etc/ipsec.secrets.$(date +%U%T)
ipsec newhostkey --output /etc/ipsec.secrets (有時候長時間沒反應,需要多等下)
2)在Lserver上執行下面的命令獲得leftrsasigkey(即Lserver的公鑰Public Key)
[root@Lserver1 ~]# ipsec showhostkey --left
[root@Lserver1 ~]# ipsec showhostkey --left >tmp.log
3)在Rserver上執行下面的命令獲得leftrsasigkey(即Lserver的公鑰Public Key)
[root@Lserver1 ~]# ipsec showhostkey --right
[root@Lserver1 ~]# ipsec showhostkey --right >tmp.log
4)編輯配置文件ipsec.conf
模板文件cat /usr/local/share/doc/openswan/ipsec.conf-sample
vim /etc/ipsec.conf
兩邊重新啓動
/etc/init.d/ipsec restart
/etc/init.d/ipsec status
IPsec running - pluto pid: 15761
pluto pid 15761
8 tunnels up
some eroutes exist
不出意外,已經配置正確
5)對每個子網IP做NAT映射
所有主機都通過openswan網關出網
Lserver1:
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE
echo “iptables -t nat -I POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE” >> /etc/rc.local
(此時Lclient可以上網了)
Rserver1:
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.3.0/24 -j MASQUERADE
echo “iptables -t nat -I POSTROUTING -o eth0 -s 192.168.3.0/24 -j MASQUERADE” >> /etc/rc.local
(此時Rclient可以上網了)
6. 啓動OpenSwan服務
6.1 分別重啓OpenSwan服務
/etc/init.d/ipsec restart
此時Lclient 192.168.2.180和 Rclient 192.168.3.181 互ping能通,目標完成
7.
7.2 通過route實戰解決跨機房間的故障
此類問題,最多的就是排查路由的問題,因爲有些服務器的網關並不是openswan網關的地址,即不符合本文開頭的約定。
此時就需要route命令爲網關地址不是openswan網關的地址的客戶端添加特定路由。
7.3 通過tcpdump實戰解決跨機房間的故障
tcpdump檢查實際上是對數據包去和回進行跟蹤,然後採取措施糾正其錯誤
tcpdump -nnn -i eth0 -s 10000 | grep ICMP
如果是多機房下面增加一段配置
7.4
1)大中型公司代碼上線的解決方案
2)IDC機房或辦公室***撥號訪問解決方案
3)跨機房跨辦公場所互聯解決方案(***和ipsec) <==修路搭橋
4)撥號到一個主機房,然後直接方案其他機房的內部服務器方案(藉助2,3)
5)跨機房的數據同步方案(文件同步rsync,inotify,unsion,csync) <==跑汽車,火車
6)跨機房的數據同步方案(m-s)
7)跨機房之間的業務訪問解決方案
a.要儘可能多的本地訪問,少量異地訪問,例如,A機房的web原來是訪問B機房的DB(開發人員的思路)改成遠程寫B機房的數據庫,然後都本地的數據庫(從對端把主庫數據同步到A端從數據庫中)
思想:遠程寫,本地讀(包括圖片文件和數據等)
8)跨機房通過隊列異步同步數據(A機房寫消息隊列裏Q,B機房消費A機房的消息隊列Q)
9)tcpdump排查故障的思路思想
10)統一認證解決方案(服務器\FTP,SAMBA,***,POSTFIX,SVN,HTTP,JIRA,GIT)
11)跨機房業務的高可用可用方案(***,IPSEC)