一、项目准备

1.1、VMware ESXi

VMware ESXi

1.2、Ubuntu镜像

Ubuntu 22.04.3 ISO

1.3、OpenConnect客户端

ALL Client

1.4、AnyConnect客户端

国内:下载导航页 国外:下载导航页

1.5、SSH工具

MobaXterm

1.5.1、MobaXterm激活

MobaXterm 常规设置指南

二、部署Ubuntu

Ubuntu系统在VMware ESXi中安装设置请参考 Ubuntu搭建OpenVPN配置分流规则指南!第二步)

三、安装Ocserv

3.1、确认软件包

apt-cache show ocserv

PixPin_2023-12-22_23-28-48

3.2、更新软件列表

sudo apt-get update

PixPin_2023-12-22_23-32-03

3.3、安装Ocserv

sudo apt-get install -y ocserv

PixPin_2023-12-22_23-35-03

3.4、检查版本

ocserv -version

PixPin_2023-12-22_23-36-11

3.5、版本升级

根据测试发现ocserv 1.1.3会在启动之后崩溃,所以我们需要升级到ocserv1.1.6版本,来解决该问题

sudo apt-get install -y wget && wget https://mirror.iranserver.com/ubuntu/ubuntu/pool/universe/o/ocserv/ocserv_1.1.6-2_amd64.deb

PixPin_2023-12-22_23-44-07

如果直接安装1.1.6版本需要先安装下面这些依赖,否则会执行报错

sudo apt-get install ssl-cert libev4 libhttp-parser2.9 libnl-route-3-200 liboath0 libprotobuf-c1 libradcli4 libtalloc2
sudo dpkg -i ocserv_1.1.6-2_amd64.deb

yydy_2024-01-10_22-17-31

查看版本是否升级成功

ocserv -version

PixPin_2023-12-23_00-25-16

3.6、告警解决

告警一:"/run/ocserv" 目录无法访问,因此无法创建用户的家目录。

sudo mkdir /var/lib/ocserv
sudo chown -R ocserv:ocserv /var/lib/ocserv

PixPin_2023-12-23_00-33-01

告警二:"invoke-rc.d" 受到了 "policy-rc.d" 的限制,因此无法执行重启操作。

sudo nano /usr/sbin/policy-rc.d
#!/bin/sh
while true; do
   case "$1" in
      -*) shift;;
      makedev|x11-common|ocserv) exit 0;;
      *) exit 101;;
   esac
done

PixPin_2023-12-23_00-34-13

3.7、重启Ocserv

sudo systemctl restart ocserv

PixPin_2023-12-23_00-36-55

因为我们刚刚升级完版本,还没有创建证书以及密钥等信息,所以在start后,服务会报错,无法启动,那接下来我们需要创建证书以及密钥

3.8、创建SSL证书

创建并进去证书目录

mkdir /etc/ocserv/certificates && cd /etc/ocserv/certificates

3.9、创建ca.tmpl

nano ca.tmpl

下面的内容改不改不影响VPN连接,如果你需要查看VPN连接日志,建议修改下面的信息

cn = "Your CA name"
organization = "Your organization name"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key

PixPin_2023-12-23_00-48-44

3.10、创建server.tmpl

nano server.tmpl

下面的内容改不改不影响VPN连接,如果你需要查看VPN连接日志,建议修改下面的信息

cn = "Your hostname or IP" 
organization = "Your organization name" 
serial = 2
expiration_days = 3650
signing_key 
encryption_key
tls_www_server

PixPin_2023-12-23_00-49-23

3.11、生成CA证书

如果提示没有certtool程序,先安装gnutls-bin然后重新创建ca-key.pem

sudo apt-get install -y gnutls-bin
certtool --generate-privkey --outfile ca-key.pem

PixPin_2023-12-23_00-49-52

certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

PixPin_2023-12-23_00-50-52

3.12、用CA证书签VPN证书

certtool --generate-privkey --outfile server-key.pem

PixPin_2023-12-23_00-54-23

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

PixPin_2023-12-23_00-55-23

3.13、复制crt,key到ocserv目录

sudo cp server-cert.pem server-key.pem /etc/ocserv/

PixPin_2023-12-23_01-02-45

3.14、查看当前ocserv.conf默认配置

cd .. && cat ocserv.conf | grep '^[^#|^;]'

PixPin_2023-12-23_01-07-37

3.15、修改配置文件

3.15.1、查看SSL证书路径和密钥路径

cd certificates && ll && pwd

PixPin_2023-12-23_22-30-50

3.15.2、添加SSL证书路径和密钥路径到配置文件中

ca-cert = /etc/ocserv/certificates/ca-cert.pem
server-cert = /etc/ocserv/certificates/server-cert.pem
server-key = /etc/ocserv/certificates/server-key.pem

3.15.3、添加VPN连接成功欢迎信息

banner = "Welcome YYDY OcservVPN"

3.15.4、开启MTU控制

try-mtu-discovery = true
mtu = 1200

3.15.5、修改最大客户端数

max-clients = 100

3.15.6、修改单账户最大客户端数

max-same-clients = 5

3.15.7、修改用户VPN网卡IP段

尽量避免和内网网段冲突

ipv4-network = 100.255.255.0
ipv4-netmask = 255.255.255.0

3.15.8、修改用户VPN网卡DNS

如果内网有绿色DNS服务器场景,或者用户连接VPN后需要解析内网域名,则需要添加本项,否则略过

dns = 10.10.10.10

3.15.9、下发谷歌微软以及国内拒绝路由表

谷歌微软路由表

3.15.10、不下发指定路由

no-route 10.0.0.0/8
no-route 172.16.0.0/12
no-route 192.168.0.0/16

3.15.11、下发指定路由

route 10.10.10.10/32

3.15.12、重启生效

sudo systemctl restart ocserv.service

3.15.13、查看状态

sudo systemctl status ocserv.service

PixPin_2023-12-23_23-40-06

3.15.14、创建这个文件

sudo touch /run/ocserv-socket
sudo chmod 660 /run/ocserv-socket
sudo chown ocserv:ocserv /run/ocserv-socket

3.15.15、检查服务端口是否正常

lsof -i:443

PixPin_2023-12-23_23-13-27

3.16、创建账号文件

sudo touch /etc/ocserv/passwd

3.17、创建用户yydy

sudo ocpasswd -c /etc/ocserv/passwd yydy

PixPin_2023-12-23_23-18-14

如果要删除刚刚创建的账号请用下面的命令,-d后面加上账号名

sudo ocpasswd -c /etc/ocserv/passwd -d username

四、OpenConnect测试

正常情况应该是公网测试连接,需要做端口映射到Ocserv服务器的tcp/udp443端口,我测试直接用内网的IP连接看效果

Image 1 Image 2
Image 3 Image 3

PixPin_2023-12-23_23-54-03

4.1、路由前后对比

route print -4

PixPin_2023-12-23_23-59-24

4.2、内网地址不可达

因为我们网卡现在拿到的IP是Ocserv下发的网段,所以到内网无法访问,所以要开启NAT以及ipv4转发,不然终端电脑不能利用VPN隧道上网访问谷歌微软那些网段

tracert -d -w 1 内网IP

PixPin_2023-12-24_00-05-42

五、配置VPN上网

5.1、查看Ocserv服务器上网网卡名称

ip addr

PixPin_2023-12-24_00-10-39

5.2、开启路由转发

sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/s/#//' /etc/sysctl.conf
sysctl -p

5.3、配置iptables

sudo iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE

5.4、安装iptables-persistent

需要让iptables规则在Ocserv服务器重启后依旧生效

sudo apt install -y iptables-persistent

5.5、保存到iptables-persistent

sudo netfilter-persistent save

六、测试验证

PixPin_2023-12-24_00-17-11
PixPin_2023-12-24_00-18-26

七、遇到的问题

7.1、路由下发问题

下面这个格式是正确的

no-route = 10.0.0.0/255.0.0.0
no-route = 172.16.0.0/255.240.0.0
no-route = 192.168.0.0/255.255.0.0
route = 192.168.100.3/255.255.255.255
route = 192.168.100.4/255.255.255.255
route = 192.168.6.0/255.255.255.0

下面这个格式是错误的,发现客户端拿不到路由

no-route = 10.0.0.0/8
no-route = 172.16.0.0/12
no-route = 192.168.0.0/16
route = 192.168.100.3/32
route = 192.168.100.4/32
route = 192.168.6.0/24

八、CiscoAnyconnect测试

Image 1 Image 2

PixPin_2023-12-24_00-25-25
PixPin_2023-12-24_00-25-50

Image 1 Image 2
Image 1 Image 2

PixPin_2023-12-24_00-28-54

九、海外加速测试

PixPin_2023-12-24_00-42-48
PixPin_2023-12-24_00-43-44
PixPin_2023-12-24_00-44-23
PixPin_2023-12-24_00-45-17
PixPin_2023-12-24_00-46-05