@目錄1. 安裝 ocserv (OpenConnect server)2.生成證書1) 創建工作文件夾2) 生成 CA 證書3) 生成本地伺服器證書4) 生成客戶端證書(不生成)3. 配置 ocserv4.創建用戶5.配置系統設置1) 開啟內核轉發2) 配置iptables規則(不需要配置)3) ...
@
目錄1. 安裝 ocserv (OpenConnect server)
ocserv 是一個 OpenConnect SSL VPN 協議服務端,0.3.0 版後相容使用 AnyConnect SSL VPN 協議的終端。
官方主頁:http://www.infradead.org/ocserv/
ocserv 已經在 epel 倉庫中提供了,所以可以直接通過 yum 安裝
yum install epel-release
yum install ocserv
2.生成證書
閱讀官方文檔
1) 創建工作文件夾
mkdir /opt/anyconnect
cd /opt/anyconnect/
2) 生成 CA 證書
certtool --generate-privkey --outfile ca-key.pem
cat >ca.tmpl <<EOF
cn = "VPN CA"
organization = "Big Corp"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key
EOF
certtool --generate-self-signed --load-privkey ca-key.pem \
--template ca.tmpl --outfile ca-cert.pem
把生成的 ca-cert.pem
放到 /etc/ocserv/
中
cp ca-key.pem /etc/ocserv/
3) 生成本地伺服器證書
certtool --generate-privkey --outfile server-key.pem
cat >server.tmpl <<EOF
cn = "VPN server"
organization = "MyCompany"
serial = 2
expiration_days = 3650
encryption_key
signing_key
tls_www_server
EOF
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
把生成的 server-cert.pem
和 server-key.pem
放到 /etc/ocserv/
中
cp server-cert.pem server-key.pem /etc/ocserv/
4) 生成客戶端證書(不生成)
3. 配置 ocserv
vim /etc/ocserv/ocserv.conf
# 使用密碼登錄註釋掉
#auth = "pam"
auth = "plain[/etc/ocserv/ocpasswd]"
# 埠 TCP and UDP port number
tcp-port = 443
udp-port = 443
# 證書地址
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
# 取消註釋設置客戶端IP段
ipv4-network = 192.168.111.0
ipv4-netmask = 255.255.255.0
# 取消註釋設置客戶端DNS
dns = 114.114.114.114
# 必須配置一個自己連接的VPN伺服器IP段,允許訪問下麵的網段
route = 192.168.0.0/255.255.0.0
4.創建用戶
#username為你要添加的用戶名
ocpasswd -c /etc/ocserv/ocpasswd username
5.配置系統設置
1) 開啟內核轉發
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
2) 配置iptables規則(不需要配置)
# 對指定的表 table 進行操作,添加一個規則,把192.168.111.0的流量指定到ens36出去
iptables -t nat -A POSTROUTING -s 192.168.111.0 -o ens36 -j MASQUERADE
iptables -A FORWARD -i vpns+ -j ACCEPT
iptables -A FORWARD -o vpns+ -j ACCEPT
# 保存路由表
iptables-save > /etc/sysconfig/iptables
3) 放行埠(必須配置)
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=443/udp
firewall-cmd --add-masquerade --permanent #必須配置,重要
firewall-cmd --reload
6.測試
現在我們可以開啟伺服器試試了
ocserv -c /etc/ocserv/ocserv.conf -f -d 10
如果沒有問題,那麼就可以配置成開機運行了
systemctl enable ocserv
systemctl start ocserv
Tips:
註意:一定要配置route=VPN自己的IP段,否則連接VPN後無法訪問VPN伺服器
#ocserv支持多種認證方式,這是自帶的密碼認證,使用ocpasswd創建密碼文件
#ocserv還支持證書認證,可以通過Pluggable Authentication Modules (PAM)使用radius等認證方式
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
#指定替代的登錄方式,這裡使用證書登錄作為第二種登錄方式
enable-auth = "certificate"
#證書路徑
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
#ca路徑
ca-cert = /etc/ocserv/ca-cert.pem
#從證書中提取用戶名的方式,這裡提取的是證書中的 CN 欄位作為用戶名
cert-user-oid = 2.5.4.3
#最大用戶數量
max-clients = 16
#同一個用戶最多同時登陸數
max-same-clients = 10
#tcp和udp埠
tcp-port = 4433
udp-port = 4433
#運行用戶和組
run-as-user = ocserv
run-as-group = ocserv
#虛擬設備名稱
device = vpns
#分配給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
#只允許訪問下麵的網段
route = 192.168.0.0/255.255.0.0
route = 172.16.0.0/255.255.0.0
route = 120.79.158.102/255.255.255.255
route = 120.79.166.14/255.255.255.255
# 採用賬號密碼方式認證
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
# 設置伺服器監聽埠,預設的是443埠,但是會和https衝突,
# 可以設置成任意不衝突的埠
tcp-port = 4433
udp-port = 4433
# 程式以哪個用戶和組運行
run-as-user = ocserv
run-as-group = ocserv
# socket文件
socket-file = /var/run/ocserv.sock
# 預設證書配置
server-cert = /etc/pki/ocserv/public/server.crt
server-key = /etc/pki/ocserv/private/server.key
# 開啟lz4壓縮
compression = true
# 隔離工作,預設不動
isolate-workers = true
# 最大客戶端數量,0表示無限數量
max-clients = 16
# 同一用戶可以同時登陸的客戶端數量
max-same-clients = 5
# 預設不動
rate-limit-ms = 100
# 伺服器統計重置時間,不動
server-stats-reset-time = 604800
# 保持連接,每隔多少秒向客戶端發送連接數據包,防止斷線。
# IOS系統5分鐘會關閉後臺數據通訊,然後就會斷線。
# 因此將keepalive和mobile-dpd設置成200秒
keepalive = 200
dpd = 90
mobile-dpd = 200
# udp埠無傳輸25秒後轉成tcp埠
switch-to-tcp-timeout = 25
# 啟用MTU轉發以優化性能
try-mtu-discovery = true
# 空閑斷開時間,如果想無限期連接,註釋這兩行
# idle-timeout=1200
# mobile-idle-timeout=2400
# 僅使用TLS1.2以上版本
cert-user-oid = 0.9.2342.19200300.100.1.1
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1"
# 認證超時時間
auth-timeout = 240
# 最小重新認證時間
min-reauth-time = 300
max-ban-score = 80
ban-reset-time = 1200
cookie-timeout = 324000
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
pid-file = /var/run/ocserv.pid
device = vpns
predictable-ips = true
# 預設功能變數名稱,修改為你的功能變數名稱或ip地址,這個設置沒有任何作用
default-domain = xxx.com:4433
# 配置自定義私有IP地址範圍,註釋預設的兩行
#ipv4-network = 192.168.1.0
#ipv4-netmask = 255.255.255.0
ipv4-network = 10.70.25.0
ipv4-netmask = 255.255.255.0
# 以VPN隧道傳輸所有DNS查詢
tunnel-all-dns = true
# 更改DNS伺服器(國內伺服器就填寫國內dns)
dns = 8.8.8.8
dns = 1.1.1.1
# 允許思科客戶端連接
cisco-client-compat = true
# 以下路由表不通過VPN隧道,直接本地網路連接
# 一定要添加自己伺服器的ip地址,否則連上VPN後打不開自己的網站
no-route = x.x.x.x / 255.255.255.255