centos7 VPN搭建與排坑 ShadowSocks+l2tp/ipsec

    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 


編輯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地址,填內網地址即可。
------------------------------------------------------------------------------------


編輯pppoptfile文件

vim /etc/ppp/options.xl2tpd     # 只修改以下幾項,其他默認
-----------------------------------------------------------------------------------------
ms-dns  114.114.114.114 # 自定義修改dns設置,這個爲連接上vpn後,爲vpn連接分配的dns ms-dns  223.5.5.5 # 根據自己的網絡進行設置,這裏我是在國內,所以設置爲國內dns name xl2tpd # 本沒有的,添加一行,定義名稱 #noccp # 註釋掉 #crtscts # 註釋掉 #lock # 註釋掉 logfile /var/log/xl2tpd.log # 本沒有的,添加一行定義日誌位置。
--------------------------------------------------------------------------------------------


7 編輯ipsec配置文件

vim /etc/ipsec.conf      # 只修改以下項,其他默認
--------------------------------------------------------
config setup
        protostack=netkey     # 添加一行
--------------------------------------------------------


編輯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,到此搭建部署和連接都已完成。有什麼問題可以留言。




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