VPN,虛擬專用網絡,常用與實現企業中的外網訪問內網資源,生活中的翻牆等等。而VPN的種類類型繁多,根據協議不同主要分爲:PPTP,L2TP,SSTP。而現在,很多pptp的vpn都不太穩定,像ios高版本都不再支持。而SSTP在centos上實現的服務端也比較少,在這裏不討論openvpn,對新手來說有點複雜。
爲了快速,穩定的解決問題,實現vpn的內網訪問,訪問代理翻牆等功能,這裏主要給出兩個絕對可行的方案。
1.ShadowSocks。 這個是就是著名的ss翻牆了,配置簡單方便。主要用於翻牆,實現被牆網站的訪問,用途有限。非用於翻牆的用戶,不推薦使用。
2. l2tp/ipsec 。 這個主要用於企業中,實現VPN的內網訪問等功能,當然也可以用於翻牆,功能能強大。
服務器環境: centos7
客戶端環境: win10
一: ShadowSocks
先從簡單的 ShadowSocks開始講起,使用ss搭梯子也是很經典的,在網上很多教程,簡單方便。本身有很多的版本,這裏使用最簡單的python版本。支持python2,python3都可以。
1.首先,安裝python的pip包管理工具,然後通過pip安裝ShadowSocks 服務端
yum install -y python2-pip
pip install ShadowSocks
2. 創建配置文件
vim /etc/shadowsocks.json
----------------------------------------------------------------------------------------------------
{
"server":"0.0.0.0", # 不用改,循序所有ip進行連接
# 單端口配置,直接配置服務端口和密碼。
"server_port":8080, # 服務端口,連接時,使用的端口
"password":"填寫密碼",
# 多端口配置,不同的端口對應不同的密碼。
"port_password": {
"8080": "填寫密碼",
"8081": "填寫密碼"
},
# 以上兩種配置,根據需求二選其一
# 以下爲公共的配置
"local_address":"127.0.0.1", # 本機地址,不用改
"local_port":1080, # 本機端口,不用改,默認即可
"timeout":600, # 超時時間,默認300
"fast-open":"false", # 默認false,如果你的服務端和客戶端都部署在linux 3.7 以上,那麼可以打開這個以降低延遲,一般用不着
"method":"aes-256-cfb" # 加密方式,默認此方式,如果修改,連接時需要指定相同的加密方式
}
--------------------------------------------------------------------------------------------------------
3. 啓動服務,開放端口。
ssserver -c /etc/shadowsocks.json -d start
# -c 指定配置文件,-d 後臺運行, start啓動,stop停止,restart重啓。
firewall-cmd --add-port=8080/tcp --permanent # 開放8080端口
firewall-cmd --reload # 重載防火牆
# 這裏,需要開發的端口爲服務端口即配置文件中server_port或port_password中配置的端口,local_port不用。如果是多端口的配置,就要開放多個。
4. 下載客戶端,進行連接
我們這裏的客戶端操作系統爲 win10,下載相應版本的客戶端,下載地址:
https://github.com/shadowsocks/shadowsocks-windows/releases
不同的操作系統有不同的客戶端,如下:
Mac:https://github.com/shadowsocks/ShadowsocksX-NG/releases
Android: https://github.com/shadowsocks/shadowsocks-android/releases
用linux系統的,肯定都不是小白了,怎麼弄,自己去找吧!我就懶得找了,畢竟發行版太多。
5. 使用客戶端,連接Shadowsocks 服務端。
這裏是用的windows客戶端。下載後,直接打開:
按照此進行簡單的配置即可,下面代理端口,即使服務端配置文件中的上local_port,默認是1080。配置好後,右下角點擊圖標右鍵啓動系統代理,在系統代理模式中可以選擇全局模式和pac模式,全局則是所有訪問都通過代理進行,pac則是隻有當訪問國外網站時纔會走代理,訪問國內是走本地網絡。pac是一個配置文件,裏面維護着需要代理的國外網站地址。可以在pac中選擇使用在線pac或本地pac,在線pac的話,則是有人同一維護,也方便,本地的話,則可以進行自定義,靈活。
OK,到此,連接上ShadowSocks服務端後,就可以使用代理訪問網站了,驗證的話,使用全局模式,在百度中搜索ip,查看自己的ip地址是否是變爲了服務端的ip地址。
二。 L2tp/Ipsec
很多時候,我們不主要是用於翻牆,而是企業內部個人用戶使用,使得個人用戶能使用公司網絡,訪問公司私有資源等。比如,一臺雲服務器,只允許公司網絡登陸,那麼通過這個vpn,就可以在家連上vpn後,使用公司網絡登陸雲服務器。好了,廢話不多說,現在記錄一下 l2tp/ipsec VPN的搭建。
1. 先看看你的主機是否支持pptp,返回結果爲yes就表示通過。
modprobe ppp-compress-18 && echo yes
2.是否開啓了TUN,有的虛擬機主機需要開啓,返回結果爲cat: /dev/net/tun: File descriptor in bad state。就表示通過。
cat /dev/net/tun
3 安裝EPEL源(CentOS7官方源中已經去掉了xl2tpd)
yum install -y epel-release
4 安裝xl2tpd和libreswan(openswan已經停止維護)
yum install -y xl2tpd libreswan lsof
5 編輯xl2tpd配置文件
vim /etc/xl2tpd/xl2tpd.conf # 修改以下選項,其他默認
-----------------------------------------------------------------------------------
[lns default]
ip range = 192.168.8.128-192.168.8.254 # 這是指連上vpn後被分配的虛擬IP,最好不要與真實的ip端有衝突,可以隨意設置
local ip = 192.168.9.87 # 這裏填本機ip地址,填內網地址即可。
------------------------------------------------------------------------------------
6 編輯pppoptfile文件
vim /etc/ppp/options.xl2tpd # 只修改以下幾項,其他默認
-----------------------------------------------------------------------------------------
7 編輯ipsec配置文件
vim /etc/ipsec.conf # 只修改以下項,其他默認
--------------------------------------------------------
config setup
protostack=netkey # 添加一行
--------------------------------------------------------
8 編輯include的conn文件
vim /etc/ipsec.d/l2tp-ipsec.conf # 新建如下配置文件
---------------------------------------------------------------------------------
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
dpddelay=10
dpdtimeout=20
dpdaction=clear
forceencaps=yes
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=192.168.9.87 # 這個是網卡的內網IP,後面通過NAT轉發
leftprotoport=17/1701 # 端口,默認1701,不用改
right=%any
rightprotoport=17/%any
----------------------------------------------------------------------------------------------
9 設置用戶名密碼
vim /etc/ppp/chap-secrets
-----------------------------------------------------------------------------------------------
# Secrets for authentication using CHAP
# client server secret IP addresses
Myname * 123456 *
# 格式爲: 用戶名 類型 密碼 允許訪問的ip
# 這個配置文件,也是pptpd的用戶密碼配置文件,直接類型上用*表示所有。因爲這裏我們只搭建l2tp/ipsec
--------------------------------------------------------------------------------------------------
10 設置預共享密鑰PSK
vim /etc/ipsec.d/default.secrets # 新建如下文件
------------------------------------------------------------------------------------
: PSK "MyPSK" # 就一行,填上自定義的PSK,連接時會使用到。
------------------------------------------------------------------------------------
11 CentOS7 防火牆設置
firewall-cmd --permanent --add-service=ipsec # 放行ipsec服務,安裝時會自定生成此服務
firewall-cmd --permanent --add-port=1701/udp # xl2tp 的端口,默認1701.
firewall-cmd --permanent --add-masquerade # 啓用NAT轉發功能。必須啓用此功能
firewall-cmd --reload # 重載配置
12 修改內核參數
vim /etc/sysctl.conf # 添加如下配置到文件中
------------------------------------------------------------------------------------------
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.accept_redirects = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.eth1.send_redirects = 0
net.ipv4.conf.eth2.accept_redirects = 0
net.ipv4.conf.eth2.rp_filter = 0
net.ipv4.conf.eth2.send_redirects = 0
net.ipv4.conf.ip_vti0.accept_redirects = 0
net.ipv4.conf.ip_vti0.rp_filter = 0
net.ipv4.conf.ip_vti0.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.ppp0.accept_redirects = 0
net.ipv4.conf.ppp0.rp_filter = 0
net.ipv4.conf.ppp0.send_redirects = 0
----------------------------------------------------------------------------------------------
sysctl -p # 加載內核參數使生效
13 啓動ipsec
systemctl enable ipsec # 設爲開機啓動
systemctl start ipsec # 啓動服務
14 檢查配置
ipsec verify # 檢查命令
# 可能會出現類似如下情況:
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/ens160/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/ens192/rp_filter [ENABLED]
# 這是內核參數沒有生效,直接依次手動打開這些文件,將 1 改爲 0
# 然後重新執行檢查,輸出如下內容則OK:
-----------------------------------------------------------------------------------------------
Verifying installed system and configuration files
Version check and ipsec on-path [OK]
Libreswan 3.23 (netkey) on 3.10.0-327.el7.x86_64
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]
Pluto ipsec.conf syntax [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking rp_filter [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto ipsec.secret syntax [OK]
Checking 'ip' command [OK]
Checking 'iptables' command [OK]
Checking 'prelink' command does not interfere with FIPS [OK]
Checking for obsolete ipsec.conf options [OK]
-------------------------------------------------------------------------------------------------
15 啓動xl2tp
systemctl enable xl2tpd # 設爲卡機啓動
systemctl start xl2tpd # 啓動xl2tp
到此,服務端的搭建已經完成,然後就是使用客戶端進行連接,win10可以使用自帶的vpn客戶端進行連接,不需要安裝任何東西。這裏記錄如果使用win10進行連接,如果是mac或linux系統,會有別的vpn客戶端,這裏暫不介紹,有興趣的百度以下即可。
三 使用windows內置vpn,進行連接
然後,使用上面自定義的用戶名密碼,點擊連接,會很久都連接不上,然後報如下錯誤: L2TP連接嘗試失敗,因爲安全層在初始化與遠程計算機的協商時遇到了一個處理錯誤
這是由於win10本身的問題,解決辦法如下:
1. 首先,打開網絡適配器,修改VPN連接的屬性:
2. 查看服務狀態,確保開啓並設備爲開機啓動
windows+r 運行 輸入 services.msc,查找ipsec policy agent
修改後,重啓計算機,再此連接看看,如果還是不行,則執行下面步驟,修改註冊表
3. 添加註冊表信息
找到如下菜單: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
點擊編輯,添加ProhibitIpSec,類型爲 DWORD(32位), 必須是32位,64位不行,注意。 vlan爲1
修改AllowL2TPWeakCrypto, vlan爲 1.
修改後,如下:
保存退出,重啓計算機即可。然後再次連接vpn,就會發現連上了。然後試試訪問內網資源,或者直接百度搜索IP,會發現自己的ip地址變成的服務端的ip地址。即可以使用此網絡進行訪問。
OK,到此搭建部署和連接都已完成。有什麼問題可以留言。