StrongSwan 搭建IPsec (IKEv1 and IKEv2) 實現不同區域網之間通訊
<h5 align = "center">使用strongswan搭建屬於你自己的IPsec (IKEv1 & IKEv2)</h5>
在現實之中,VPN可以滿足我們很多的需求,比如總公司和分公司之間,如果需要實現區域網之間通訊互相訪問,使用VPN是一個很好的解決方案,還有我們伺服器,很多時候伺服器可能只是允許某個ip進行登陸,需要允許管理員進行撥號進行,下面教程是以StrongSwan為基礎來搭建我們的VPN平臺
一、 環境和前期準備工作
1. 環境
- CentOS 7 最小化安裝版
- strongswan-5.3.5 到strongswan官網下載,或者點選這裡下載
- 1G 記憶體
- 1核CPU
2. 配置環境
- 配置主機名 (可選)
- 關閉selinux(Centos)
vim /etc/selinux/conf
# 把 SELINUX=enforcing 改為 SELINUX=disabled
setenforce = 0
- 安裝必要地軟體包,直接使用yum安裝
#CentOS 安裝如下
yum update -y
yum upgrade -y
yum -y install pam-devel openssl-devel make gcc curl wget
#Ubuntu 安裝如下
apt-get update -y ; apt-get upgrade -y
apt-get -y install libpam0g-dev libssl-dev make gcc curl wget
<br />
二、 搭建步驟
我們下載所有軟體地存放位置是 /usr/local/src 這裡
- 下載strongswan,並解壓安裝
cd /usr/local/src #進到下載目錄
wget --no-check-certificate https://download.strongswan.org/strongswan-5.3.5.tar.gz #進行下載
tar -zvxf strongswan-5.3.5.tar.gz #解壓軟體
cd strongswan-5.3.5 #進到目錄
mkdir /usr/local/strongswan #建立安裝目錄
#編譯安裝
#KVM、XEN虛擬化方案的主機使用以下配置編譯,OpenVZ的主機需要在後面新增 --enable-kernel-libipsec
./configure --prefix=/usr/local/strongswan --enable-eap-identity --enable-eap-md5 --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock --enable-unity --enable-certexpire --enable-radattr --enable-swanctl --enable-openssl --disable-gmp
make #編譯
make install #安裝
# 做軟連線
ln -s /usr/local/strongswan/sbin/* /usr/local/sbin
ln -s /usr/local/strongswan/bin/* /usr/local/bin
注意事項: 安裝後一定要做軟連線,並且清楚自己的虛擬化方案是哪個,加入正確的配置,否者會照成無法上網
- 進行CA配置
CA 生成存放目錄為 /usr/local/src/ca
建立ca目錄mkdir /usr/local/src/ca
- 生成私鑰和根證照,並且根證照使用的是自簽名形式
這裡C表示國家名,O表示組織單位,CN表示通用名字
ipsec pki --gen --outform pem > ca.key.pem
ipsec pki --self --in ca.key.pem --dn "C=CN, O=MyStrongSwan, CN=MyStrongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
- 生成伺服器證照
ipsec pki --gen --outform pem > server.key.pem
ipsec pki --pub --in server.key.pem --outform pem > server.pub.pem
ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in server.pub.pem --dn "C=CN, O=MyStrongSwan, CN=myDomain.com" --san="myDomain.com" --san="YourIP" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
注意事項 : 伺服器這邊的CN一定是你網路卡的ip,或者你網路卡ip對應的域名,--san 設定設定別名,建議設定兩個或者兩個以上,分別為你的域名和網路卡ip;–flag serverAuth 表示證照使用用途,不加windows 7會報錯,非 iOS 的 Mac OS X 要求了“IP 安全網路金鑰互換居間(IP Security IKE Intermediate)”這種增強型金鑰用法(EKU),–flag ikdeIntermediate;
- 生成客戶端證照 (可選)
ipsec pki --gen --outform pem > client.key.pem
ipsec pki --pub --in client.key.pem --outform pem > client.pub.pem
ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in client.pub.pem --dn "C=CN, O=MyStrongSwan, CN=MyDomain.com" --outform pem > client.cert.pem
#以下生成證照需要密碼地,請設定密碼,因為MAC不能匯入密碼為空的證照
openssl pkcs12 -export -inkey client.key.pem -in client.cert.pem -name "MyStrongSwan Client Cert" -certfile ca.cert.pem -caname "MyStrongSwan CA" -out client.cert.p12
- 安裝證照
\cp -r ca.key.pem /usr/local/strongswan/etc/ipsec.d/private/
\cp -r ca.cert.pem /usr/local/strongswan/etc/ipsec.d/cacerts/
\cp -r server.cert.pem /usr/local/strongswan/etc/ipsec.d/certs/
\cp -r server.key.pem /usr/local/strongswan/etc/ipsec.d/private/
\cp -r client.cert.pem /usr/local/strongswan/etc/ipsec.d/certs/
\cp -r client.key.pem /usr/local/strongswan/etc/ipsec.d/private/
- 配置ipsec.conf
vim /usr/local/strongswan/etc/ipsec.conf
config setup
uniqueids=no
conn %default
compress = yes
ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!
esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!
keyexchange = ike
keyingtries = 1
#for andorid、ios、mac
conn cisco_xauth_psk
left = %any
leftid = YourIP or Domain
leftauth = psk
leftfirewall = yes
fragmentation = yes
leftsubnet = 0.0.0.0/0
right = %any
rightauth = psk
rightauth2 = xauth
rightsourceip = 172.16.6.0/24
rekey = no
auto = add
dpdaction=clear
#for windows 7/10 , strongswan agent and other ca
conn IKEv2-EAP-Windows
leftca = "C=CN, O=,MyStrongSwan; CN=YourIP or domain"
leftcert = server.cert.pem
leftsendcert = always
rightsendcert = never
leftid = YourIP or domain
left = %any
right = %any
leftauth = pubkey #使用證照形式認證
rightauth = eap-radius #認證使用radius
leftfirewall = yes
leftsubnet = 0.0.0.0/0 #全部流量走vpn
rightsourceip = 172.16.7.0/24
fragmentation = yes #包重組
eap_identity = %any
rekey = no #不重複檢查,用來開啟多裝置登入
auto = add
dpdaction=clear #斷開後清空
- 配置 strongswan.conf
vim /usr/local/strongswan/etc/strongswan.conf
charon {
filelog {
/var/log/strongswan.charon.log {
time_format = %b %e %T
default = 2
append = no
flush_line = yes
}
}
load_modular = yes
duplicheck.enable = no #是為了你能同時連線多個裝置,所以要把冗餘檢查關閉
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8
dns2 = 223.5.5.5
#only for windows
nbns1 = 8.8.8.8
nbns2 = 223.5.5.5
}
include strongswan.d/*.conf
- 配置 ipsec.secrets
: RSA server.key.pem
: PSK "visionsrv"
: XAUTH "visionsrv"
myvpn %any : EAP "123456"
- 配置Firewall和轉發
1.開放埠
firewall-cmd --add-port=500/tcp --permanent
firewall-cmd --add-port=500/udp --permanent
firewall-cmd --add-port=4500/tcp --permanent
firewall-cmd --add-port=4500/udp --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
2.編輯 /etc/systcl.conf
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
3.開啟 firewall的轉發功能
iptables -t nat -A POSTROUTING -s 172.16.6.0/24 -o ens160 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.7.0/24 -o ens160 -j MASQUERADE
- 啟動服務
ipsec start
systemctl restart strongswan
三、 各種終端測試
相關文章
- 實現不同程式之間的通訊
- 用VC在區域網實現IP多播通訊
- 用NSConnection實現不同程式間的通訊
- QT之不同主機之間TCP通訊QTTCP
- 上位機和下位機之間區域網的搭建
- Flink不同併發之間如何通訊
- 同網段不同網段主機間通訊原理
- 利用SMTP虛擬伺服器實現不同郵件系統之間的通訊伺服器
- 不同頁面通訊與跨域跨域
- 用隧道協議實現不同dubbo叢集間的透明通訊協議
- 在如何實現兩個JBoss之間的訊息通訊?
- 父子頁面之間跨域通訊的方法跨域
- Android探索之AIDL實現程式間通訊AndroidAI
- 網路通訊2:TCP通訊實現TCP
- Electron實戰之程式間通訊
- 用postMessage實現跨域通訊跨域
- js訊息訂閱和釋出實現元件之間通訊JS元件
- .NET與JSP頁面之間訊息通訊(跨域,使用html5的postMessage實現)JS跨域HTML
- 達夢DBlink叢集之間通訊搭建
- 探討一下flutter不同介面之間的通訊Flutter
- 利用IPsec實現網路安全之五(Kerveros實現身份驗證)ROS
- python實現兩臺不同主機之間進行通訊(客戶端和服務端)——SocketPython客戶端服務端
- 【專案原始碼】- 【區域網聊天】android實現區域網聊天 - UDP實現原始碼AndroidUDP
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- Windows區域網通過NTP設定時間同步Windows
- 通過 App Groups 實現程式間通訊APP
- 如何實現同一路由器不同vlan之間的通訊?vlan劃分配置方法路由器
- 如何實現瀏覽器標籤頁之間的通訊瀏覽器
- 在 OpenResty 裡實現程式間通訊REST
- 程式間通訊的另類實現
- 利用IPsec實現網路安全之四(CA證書實現身份驗證)
- liunx使用者空間和核心空間之間的通訊實現(在PPC下的實現)(轉)
- 企業網盤實現區域網共享
- Ubuntu18.04 安裝opensips,實現區域網內sip語音視訊通話Ubuntu
- Linux下如何實現區域網內網路裝置相互通訊Linux內網
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- 父子元件之間通訊元件
- vue工程利用pubsub-js實現兄弟元件之間的通訊VueJS元件