1. 安裝ocserv ( OpenConnect server )
因為ocserv已經在epel 的庫中提供了,可以直接用yum安裝ocserv.x86_64 : OpenConnect SSL VPN server
直接用yum裝即可
# yum install epel-release (如果你還沒裝epel的話)
# yum install ocserv
2. 準備證書
# cd ~# mkdir certificates
# cd certificates
在此目錄下新建一個 ca.tmpl的CA證書模版,內容為:
cn = "xx.xx.xx.xx" organization = "xx.xx.xx.xx" serial = 1 expiration_days = 3650 ca signing_key cert_signing_key crl_signing_key
生成CA密鑰
$ certtool --generate-privkey --outfile ca-key.pem
生成CA證書
$ certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
生成伺服器憑證,這裡注意cn項必須對應你伺服器的功能變數名稱或IP,server.tmpl
cn = "Your hostname or IP" organization = "xx.xx.xx.xx" expiration_days = 3650 signing_key encryption_key tls_www_server
生成密鑰
$ certtool --generate-privkey --outfile server-key.pem
生成server證書
$ certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem
把證書移動到合適的地方
$ cp ca-cert.pem /etc/ocserv
$ cp server-cert.pem /etc/ocserv
$ cp server-key.pem /etc/ocserv
3. 準備配置文件
修改 /etc/ocserv/ocserv.conf# 登陸方式,目前先用密碼登錄 auth = "plain[/etc/ocserv/ocpasswd]" # 允許同時連接的用戶端數量 max-clients = 4 # 限制同一用戶端的並行登陸數量 max-same-clients = 2 # 服務監聽的IP(伺服器IP,可不設置) listen-host = 1.2.3.4 # 服務監聽的TCP/UDP埠(選擇你喜歡的數位) tcp-port = 4433 udp-port = 4434 # 自動優化VPN的網路性能 try-mtu-discovery = true # 確保伺服器正確讀取用戶證書(後面會用到用戶證書) cert-user-oid = 2.5.4.3 # 伺服器憑證與金鑰 server-cert = /etc/ssl/private/my-server-cert.pem server-key = /etc/ssl/private/my-server-key.pem # 用戶端連上vpn後使用的dns dns = 8.8.8.8 dns = 8.8.4.4 # 注釋掉所有的route,讓伺服器成為gateway #route = 192.168.1.0/255.255.255.0 # 啟用cisco用戶端相容性支援 cisco-client-compat = true
這邊要注意tcp-port和udp-port不要設9000,以免跟php-fpm的port衝突
4. 測試server
創建測試帳號(test)$ ocpasswd -c /etc/ocserv/ocpasswd test
Enter password:
Re-enter password:
開啟NAT轉發:(這步我略過,查機器上的設定檔,net.ipv4.ip_forward已開啟)
$ sudo sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
$ sudo sysctl -p
啟動ocserv服務
# ocserv -f -d 1
然後打開手機上的Cisco Anyconnect新建一個VPN,添加服務器:
IP:端口
ex.
xx.xx.xx.xx:4433
連線就能輸入密碼運行
4. 創建客戶端證書,省得老輸入密碼
$ cd ~/certificates/$ vim user.tmpl
cn = "some random name" unit = "some random unit" expiration_days = 365 signing_key tls_www_client
創建user密鑰
$ certtool --generate-privkey --outfile user-key.pem
創建user證書
$ certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem
將證書和金鑰轉為PKCS12的格式,好導入Anyconnect,期間會要求你輸入帳號密碼,就輸入用ocpasswd產生的帳號密碼
$ certtool --to-p12 --load-privkey user-key.pem --pkcs-cipher 3des-pkcs12 --load-certificate user-cert.pem --outfile user.p12 --outder
Generating a PKCS #12 structure...
Loading private key list...
Loaded 1 private keys.
Enter a name for the key: test
Enter password:
Confirm password:
然後把user.p12這個證書放到一個可以直接被訪問的地方,用safari打開安裝,導入成功後將對應的VPN => 進階 => 憑證 => 選擇你導入的憑證
為了讓伺服器能夠認得這張證書,我們再來修改一下/etc/ocserv/ocserv.conf配置
$ vim /etc/ocserv/ocserv.conf
# 改為證書登陸,注釋掉原來的登陸模式 auth = "certificate" # 證書認證不支援這個選項,注釋掉這行 #listen-clear-file = /var/run/ocserv-conn.socket # 啟用證書驗證 ca-cert = /etc/ocserv/ca-cert.pem
重啟ocserv
# kill -9 ocserv_pid
# ocserv -f -d 1
5. 智能分流
因為人在大陸直接全局翻牆會造成大陸國內網站訪問巨慢的問題,所以必須在服務器端設route table推送到客戶端https://github.com/CNMan/ocserv-cn-no-route
直接將 cn-no-route.txt 之中的 no-route 寫進 /etc/ocserv/ocserv.conf 中
最後一樣重啟ocserv服務
Windows客戶端下載
https://openconnect.github.io/openconnect-gui/
參考資料:
http://ifreedomlife.com/2015/04/20/Setup-Cisco-AnyConnect-VPN-on-CentOS7/ 在 CentOS 7 上搭建 Cisco AnyConnect VPN
https://www.logcg.com/archives/1343.html 使用ocserv搭建 Cisco Anyconnect 服务器 (主要)
沒有留言:
張貼留言