因為「工作」業務需求,需要搭建「L2TP/IPsec VPN」。
使用「strongswan」和「xl2tpd」兩組套件,透過「yum」進行「Install」,原本要使用「Centos 7」搭建,始終沒有成功...網路上「文章」太多「坑坑洞洞」學習不完全..汗。
==修改「電腦」名稱====
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=vpn
NETWORKING=yes
HOSTNAME=vpn
==關閉「selinux 」====
vi /etc/sysconfig/selinux
SELINUX=disabled
==重新「啟動」設定值才會生效======
reboot
===安裝「epel-release」資源庫===
yum install epel-release -y
==安裝「strongswan、xl2tpd」套件=
yum install strongswan xl2tpd -y
===設定「封包轉送」====
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
#寫入「設定值」
sysctl -p
===設定 「IPsec 連線」====
vi /etc/strongswan/ipsec.conf
#放到「最後面」
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
conn l2tp
keyexchange=ikev1
left=192.168.8.20 # 外網「IP」 或 內網「IP」
leftsubnet=0.0.0.0/0
leftprotoport=17/1701
authby=secret
leftfirewall=no
right=%any
rightprotoport=17/%any
type=transport
auto=add
===設定「PSK 驗證」====
vi /etc/strongswan/ipsec.secrets
# PSK 共享密碼 為「vpn」
: PSK "vpn"
===設定「L2TP Tunnel」通道====
#編輯「xl2tpd.conf」設定檔
vi /etc/xl2tpd/xl2tpd.conf
[global]
listen-addr = 192.168.8.20 # 外網「IP」 或 內網「IP」
[lns default]
#設定「VPN」-「Tunnel」
ip range = 172.30.10.1-172.30.10.200
local ip = 172.30.10.254
require chap = yes
unix authentication = yes #使用pam驗證
name = LinuxVPNserver #後面會用到
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
#重新啟動「xl2tpd」服務,寫入「設定值」
service xl2tpd restart
#檢查「xl2tpd」狀態
service xl2tpd status
===設定「pma 驗證」====
vi /etc/pam.d/ppp
auth required pam_nologin.so
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
===設定「PPP」獲取「DNS」====
vi /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 168.95.1.1
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
login #透過PAP使用系統密碼驗證
===設定「CHAP」連線「帳號、密碼」====
vi /etc/ppp/chap-secrets
#帳號「vpn」、密碼「vpn」,允許「任何」位置
# client server secret IP addresses
vpn LinuxVPNserver "vpn" *
===設定「PAP」連線「帳號、密碼」====
vi /etc/ppp/pap-secrets
# client server secret IP addresses
* LinuxVPNserver "" *
===設定「Server」相關啟動服務====
#啟動「strongswan」服務
service strongswan start
#啟動「xl2tpd」服務
service xl2tpd start
PS
若經常會遇到「xl2tpd」服務啟動失敗,請檢查「/etc/xl2tpd/xl2tpd.conf」配置檔。
#開機啟動「strongswan」服務
chkconfig strongswan on
#開機啟動「xl2tpd」服務
chkconfig xl2tpd on
#檢查「strongswan」服務
service strongswan status
#啟動「xl2tpd」服務
service xl2tpd status
===設定「Server」防火牆規則====
#開啟「防火牆」規則
iptables -A INPUT -p esp -j ACCEPT # ESP
iptables -A INPUT -p ah -j ACCEPT # AH
iptables -A INPUT -p udp --dport 500 -j ACCEPT # IKE
iptables -A INPUT -p udp --dport 4500 -j ACCEPT # NAT-T
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT # 強制 l2tp 透過 ipsec 存取。
iptables -t nat -A POSTROUTING -s 172.30.10.0/24 -o eth1 -j MASQUERADE # 轉送「VPN」流量,送往「Interface」。
/etc/init.d/iptables save
#移除「防火牆」阻擋
iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited
/etc/init.d/iptables save
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
/etc/init.d/iptables save
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
#寫入「設定值」
sysctl -p
===設定 「IPsec 連線」====
vi /etc/strongswan/ipsec.conf
#放到「最後面」
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
conn l2tp
keyexchange=ikev1
left=192.168.8.20 # 外網「IP」 或 內網「IP」
leftsubnet=0.0.0.0/0
leftprotoport=17/1701
authby=secret
leftfirewall=no
right=%any
rightprotoport=17/%any
type=transport
auto=add
===設定「PSK 驗證」====
vi /etc/strongswan/ipsec.secrets
# PSK 共享密碼 為「vpn」
: PSK "vpn"
===設定「L2TP Tunnel」通道====
#編輯「xl2tpd.conf」設定檔
vi /etc/xl2tpd/xl2tpd.conf
[global]
listen-addr = 192.168.8.20 # 外網「IP」 或 內網「IP」
[lns default]
#設定「VPN」-「Tunnel」
ip range = 172.30.10.1-172.30.10.200
local ip = 172.30.10.254
require chap = yes
unix authentication = yes #使用pam驗證
name = LinuxVPNserver #後面會用到
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
#重新啟動「xl2tpd」服務,寫入「設定值」
service xl2tpd restart
#檢查「xl2tpd」狀態
service xl2tpd status
===設定「pma 驗證」====
vi /etc/pam.d/ppp
auth required pam_nologin.so
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
===設定「PPP」獲取「DNS」====
vi /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 168.95.1.1
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
login #透過PAP使用系統密碼驗證
===設定「CHAP」連線「帳號、密碼」====
vi /etc/ppp/chap-secrets
#帳號「vpn」、密碼「vpn」,允許「任何」位置
# client server secret IP addresses
vpn LinuxVPNserver "vpn" *
===設定「PAP」連線「帳號、密碼」====
vi /etc/ppp/pap-secrets
# client server secret IP addresses
* LinuxVPNserver "" *
===設定「Server」相關啟動服務====
#啟動「strongswan」服務
service strongswan start
#啟動「xl2tpd」服務
service xl2tpd start
PS
若經常會遇到「xl2tpd」服務啟動失敗,請檢查「/etc/xl2tpd/xl2tpd.conf」配置檔。
#開機啟動「strongswan」服務
chkconfig strongswan on
#開機啟動「xl2tpd」服務
chkconfig xl2tpd on
#檢查「strongswan」服務
service strongswan status
#啟動「xl2tpd」服務
service xl2tpd status
===設定「Server」防火牆規則====
#開啟「防火牆」規則
iptables -A INPUT -p esp -j ACCEPT # ESP
iptables -A INPUT -p ah -j ACCEPT # AH
iptables -A INPUT -p udp --dport 500 -j ACCEPT # IKE
iptables -A INPUT -p udp --dport 4500 -j ACCEPT # NAT-T
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT # 強制 l2tp 透過 ipsec 存取。
iptables -t nat -A POSTROUTING -s 172.30.10.0/24 -o eth1 -j MASQUERADE # 轉送「VPN」流量,送往「Interface」。
/etc/init.d/iptables save
#移除「防火牆」阻擋
/etc/init.d/iptables save
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
/etc/init.d/iptables save
==設定「Windows 10」撥號「L2TP/IPsec VPN」===
設定「網路設定」
點選「VPN」=>「新增 VPN 連線」
1. 選擇「Windows (內建)」
2. 輸入「L2TP-VPN」
3. 輸入「192.168.8.20」IP 或 網域名稱
4. 選擇「L2TP /IPsec (使用預先共用金鑰)」
5. 輸入「VPN」
6. 選擇「使用者名稱與密碼」...以此類推
設定完以後,在「VPN」網卡介面,選擇「安全性」
允許這些通訊協定 勾選「(CHAP)」、「(MS-CHAP V2)」。
撥號進行測試「OK!」
設定「網路設定」
點選「VPN」=>「新增 VPN 連線」
1. 選擇「Windows (內建)」
2. 輸入「L2TP-VPN」
3. 輸入「192.168.8.20」IP 或 網域名稱
4. 選擇「L2TP /IPsec (使用預先共用金鑰)」
5. 輸入「VPN」
6. 選擇「使用者名稱與密碼」...以此類推
設定完以後,在「VPN」網卡介面,選擇「安全性」
允許這些通訊協定 勾選「(CHAP)」、「(MS-CHAP V2)」。
撥號進行測試「OK!」
參考資料
「TU的雜七雜八筆記本」-「CentOS 架 L2TP/IPsec VPN」