在 CentOS 7 上搭建 Cisco AnyConnect VPN
阿新 • • 發佈:2019-01-08
因為最近的干擾力度變大,考慮到 AnyConnect 是思科的安全遠端接入解決方案,隱蔽性要好一些,所以決定在伺服器上搭建 AnyConnect 以提供給 iOS 裝置使用,原來的 Cisco IPSec VPN 廢棄,Shadowsocks 保留用於安卓和PC的連線。
AnyConnect 有以下優勢:
- 待機不會斷開
- 能夠下發路由表給客戶端(未測試)
- 穩定
- 耗電量較低
1. 安裝 ocserv (OpenConnect server)
ocserv 是一個 OpenConnect SSL VPN 協議服務端,0.3.0 版後相容使用 AnyConnect SSL VPN 協議的終端。
官方主頁: http://www.infradead.org/ocserv/
ocserv 已經在 epel 倉庫中提供了,所以可以直接通過 yum 安裝
1 2 |
$ yum install epel-release $ yum install ocserv |
2. 生成證書
這裡你需要先仔細閱讀官方文件,簡單的來說,如下幾步
- 建立工作資料夾
1 2 |
$ mkdir CA $ cd CA |
- 生成 CA 證書
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ certtool --generate-privkey --outfile ca-key.pem $ cat >ca.tmpl <<EOF |
- 生成本地伺服器證書
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ certtool --generate-privkey --outfile server-key.pem |
生成之後,server-cert.pem 放到 /etc/ssl/certs,server-key.pem 放到 /etc/ssl/private
3. 配置 ocserv
1
|
$ sudo vim /etc/ocserv/ocserv.conf
|
主要修改以下部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#ocserv支援多種認證方式,這是自帶的密碼認證,使用ocpasswd建立密碼檔案 #ocserv還支援證書認證,可以通過Pluggable Authentication Modules (PAM)使用radius等認證方式 auth = "plain[/etc/ocserv/ocpasswd]" #證書路徑 server-cert = /etc/ssl/certs/server-cert.pem server-key = /etc/ssl/private/server-key.pem #最大使用者數量 max-clients = 16 #同一個使用者最多同時登陸數 max-same-clients = 10 #tcp和udp埠 tcp-port = 4433 udp-port = 4433 #執行使用者和組 run-as-user = ocserv run-as-group = ocserv #分配給VPN客戶端的IP段 ipv4-network = 10.12.0.0 ipv4-netmask = 255.255.255.0 #DNS dns = 8.8.8.8 dns = 8.8.4.4 #註釋掉route的欄位,這樣表示所有流量都通過 VPN 傳送 #route = 192.168.1.0/255.255.255.0 #route = 192.168.5.0/255.255.255.0 |
4. 建立使用者
1 2 |
#username為你要新增的使用者名稱 $ sudo ocpasswd -c /etc/ocserv/ocpasswd username |
5. 配置系統設定
- 開啟核心轉發
1 2 |
$ sudo sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf $ sudo sysctl -p |
- 配置 iptables 規則
你可以參考Linode 的文章來配置 iptables
1 2 3 4 |
#IP段和venet0介面要根據自己的情況修改 $ sudo iptables -t nat -A POSTROUTING -s 10.12.0.0/24 -o venet0 -j MASQUERADE $ sudo iptables -A FORWARD -s 10.12.0.0/24 -j ACCEPT $ sudo iptables-save > /etc/sysconfig/iptables |
6. 測試
現在我們可以開啟伺服器試試了
1
|
$ sudo ocserv -c /etc/ocserv/ocserv.conf -f -d 1
|
拿起你的 iOS 裝置,下載思科的 AnyConnect 客戶端,連線你的伺服器。
出現問題可以看debug的返回資訊,如果資訊不詳細,可以把 1 改成 10。
如果沒有問題,那麼就可以配置成開機運行了。
1 2 |
$ sudo systemctl enable ocserv $ sudo systemctl start ocserv |
a. 下發路由
我想這個功能是最激動人心的,因為我們手機如果長期連線,那麼肯定是某些服務走 VPN,而國內的網站可以走手機自己的網路體驗最好。
但是這裡的一個問題是,AnyConnect 有下發路由表的 64 條數限制。
所以我們只能保證下某幾個常用的服務是可用的,比如 Google Facebook 以及 Twitter
編輯配置檔案
1
|
$ sudo vim /etc/ocserv/ocserv.conf
|
新增 route = 的欄位即可