openswan簡介,安裝,部署

1. OpenSWan介紹

1.1 OpenSWan概述

OpenSWanlinuxIpsecI2tp協議的一個不錯的實現方案。他支持和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信息可查看軟件包下面的INSTALLREADMEDOCS

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)提示:Lserver1Rserver1可以互相ping

2)Lclient可以pingLserver1,甚至可以pingRserver1的外網卡

3)Rclient可以pingRclient

4)Lclient可以pingrserver1,同時可以pinglserver1

5)lclient不能和rclient1互通。

6)最終目的就是lclient能和rclient1互通

 

1)在部署前進行主機規劃的意義非常重大,它可以讓我們思路清晰,避免走冤枉路

2)如無特殊說明,上述規劃中的子網掩碼均爲24

3)上述中L表示leftR表示right

生產環境網段劃分

wKiom1fGbwDSqUPCAALJ5FLdC5E503.png


wKioL1fGbq3gy63aAAJKvTvl2uM008.png-wh_50

wKiom1fGbrfDWEXlAAIO7GI8WlQ470.png-wh_50

 

2.2 檢查主機間的連接是否正常

7)Lserver1Rserver1可以互相ping

8)Lclient可以pingLserver1,甚至可以pingRserver1的外網卡

9)Rclient可以pingRclient

10)Lclient可以pingrserver1,同時可以pinglserver1

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連接方式

1Network-to-Network

條件:

每個子網各自擁有一臺安裝有Openswan的主機作爲其子網的出口網關

每個子網的IP段不能有疊加

2)Road Warrior方式

當使用Network-to-Network方式時,作爲每個子網網關的之際不能像子網內部主機那樣透明訪問遠程子網的之際,也就是說:如果你是一個使用筆記本電腦的移動用戶,經常出差或是在不同的地點辦公,你的PC將不能用Network-to-Network方式與公司網絡進行連接。

Road Warrior方式正是爲這種情況而設計的,連接建立後,你的pc就可以鏈接到遠程的網絡了

5.4 使用RSA數字簽名(RSASIG)認證方式配置openswan

1)Lserver1Rserver1上分別生成新的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)對每個子網IPNAT映射

所有主機都通過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.180Rclient 192.168.3.181 ping能通,目標完成

 

7.

wKioL1fGbyWSyb5XAAQo4ecIKPw439.png 

 

7.2 通過route實戰解決跨機房間的故障

此類問題,最多的就是排查路由的問題,因爲有些服務器的網關並不是openswan網關的地址,即不符合本文開頭的約定。

此時就需要route命令爲網關地址不是openswan網關的地址的客戶端添加特定路由。

7.3 通過tcpdump實戰解決跨機房間的故障

tcpdump檢查實際上是對數據包去和回進行跟蹤,然後採取措施糾正其錯誤

 wKiom1fGb1GDC4JuAAE3hau8LAQ577.png

tcpdump -nnn -i eth0 -s 10000 | grep ICMP

 

如果是多機房下面增加一段配置

7.4

1)大中型公司代碼上線的解決方案

2)IDC機房或辦公室***撥號訪問解決方案

3)跨機房跨辦公場所互聯解決方案(***ipsec)  <==修路搭橋

4)撥號到一個主機房,然後直接方案其他機房的內部服務器方案(藉助23

5)跨機房的數據同步方案(文件同步rsync,inotify,unsion,csync<==跑汽車,火車

6)跨機房的數據同步方案(m-s

7)跨機房之間的業務訪問解決方案

a.要儘可能多的本地訪問,少量異地訪問,例如,A機房的web原來是訪問B機房的DB(開發人員的思路)改成遠程寫B機房的數據庫,然後都本地的數據庫(從對端把主庫數據同步到A端從數據庫中)

思想:遠程寫,本地讀(包括圖片文件和數據等)

8)跨機房通過隊列異步同步數據(A機房寫消息隊列裏QB機房消費A機房的消息隊列Q

9)tcpdump排查故障的思路思想

10)統一認證解決方案(服務器\FTPSAMBA***POSTFIXSVNHTTPJIRAGIT

11)跨機房業務的高可用可用方案(***IPSEC


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章