运行环境: Ubuntu/Debian
核心组件: ocserv (OpenConnect Server) + iptables + Let's Encrypt (RSA 证书)
⚠️ 避坑核心要点(提前看)
Cloudflare 必须是“灰云”: 域名解析的“代理状态”必须设为仅限 DNS (DNS Only),否则无法直连通信。
云服务商防火墙: 网页端控制台(如绿云、腾讯云等)必须放行 TCP 443 和 UDP 443。
证书算法“史诗级大坑”: 新版 Certbot 默认签发 ECDSA 证书,会导致思科官方客户端秒断开。必须强制使用传统 RSA 算法!
🛠️ 第一阶段:准备工作与证书申请
1. 解决 sudo 提示无法解析主机名(强迫症福音)
Bash
sudo nano /etc/hosts
# 在 127.0.0.1 localhost 这一行下面新增一行:
127.0.0.1 simple-winner
2. 申请 RSA 算法的 SSL 证书(极其关键)
保持 80 端口空闲,替换为你自己的域名和邮箱,一键静默申请:
Bash
sudo apt update
sudo apt install certbot -y
sudo certbot certonly --standalone -d anyc.dcdcb.com --key-type rsa -m your@email.com --agree-tos --non-interactive
证书路径通常为:/etc/letsencrypt/live/你的域名/fullchain.pem 和 privkey.pem
⚙️ 第二阶段:安装与配置 ocserv
1. 安装服务端
Bash
sudo apt install ocserv -y
2. 编辑主配置文件
Bash
sudo nano /etc/ocserv/ocserv.conf
使用 Ctrl + W 搜索并修改以下核心参数:
Ini, TOML
# --- 认证与端口 ---
# 注意:密码文件路径务必写对,是 ocpasswd
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
tcp-port = 443
udp-port = 443
# --- 替换为你的真实证书路径 ---
server-cert = /etc/letsencrypt/live/anyc.dcdcb.com/fullchain.pem
server-key = /etc/letsencrypt/live/anyc.dcdcb.com/privkey.pem
# --- 虚拟网段与 DNS ---
# 设定 VPN 客户端获取的 IP 段 (此处采用你指定的 168.192.1.0)
ipv4-network = 168.192.1.0
ipv4-netmask = 255.255.255.0
dns = 1.1.1.1
dns = 8.8.8.8
# --- 开启全局代理 ---
# 将文件中所有的 route = xxx 全部在行首加 # 注释掉
#route = 10.0.0.0/8
#route = 172.16.0.0/12
#route = 192.168.0.0/16
# --- 开启思科官方客户端兼容模式 ---
# 找到这两行,确保前面没有 # 号
cisco-client-compat = true
dtls-legacy = true
🌐 第三阶段:网络转发与防火墙 (iptables)
为了让连上 VPN 的设备能通过服务器上网,必须配置 NAT 转发。
1. 开启系统 IPv4 转发
Bash
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
2. 安装 iptables 及保存工具
Bash
sudo apt install iptables iptables-persistent -y
3. 添加 NAT 转发规则
(注意:-s 后面的网段必须与 ocserv.conf 里的 ipv4-network 绝对一致;eth0 是主网卡名称,如果不确定可通过 ip route 查看)
Bash
sudo iptables -t nat -A POSTROUTING -s 168.192.1.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -s 168.192.1.0/24 -j ACCEPT
4. 保存防火墙规则(防重启失效)
Bash
sudo netfilter-persistent save
🔑 第四阶段:账号管理与服务启停
1. 创建 / 修改 VPN 登录账号
Bash
# 将 username 替换为你想要的账号,回车后盲打两次密码
sudo ocpasswd -c /etc/ocserv/ocpasswd username
2. 重启服务并设置开机自启
Bash
sudo systemctl restart ocserv
sudo systemctl enable ocserv
3. 查看服务状态
Bash
sudo systemctl status ocserv
(如果看到 active (running) 且日志显示 TCP/UDP 443 都在 listening,说明完美运行)
📱 第五阶段:客户端连接指南 (Cisco Secure Client)
下载: 各平台应用商店搜索下载 Cisco Secure Client (原 AnyConnect)。
解除限制(极其重要): 在客户端主界面点击“设置 (Settings)”,找到并关闭“阻止不信任的服务器” (Block Untrusted Servers) 开关。
添加配置:
说明:随意填
服务器地址:填入域名
anyc.dcdcb.com高级设置里:保持证书为“自动”,绝对不要开启 IPsec。
连接: 点击连接,弹出窗口后输入刚才
ocpasswd创建的账号密码即可。
🛠️ 第六阶段:公司内网服务器的设置(作为网关)
1. 安装客户端并连接 VPS 在这台公司机器上,安装开源的 Linux 客户端:
Bash
sudo apt update
sudo apt install openconnect -y
然后让它在后台默默连上你的 VPS(使用你刚才创建的 company_gw 账号):
Bash
sudo openconnect -b --user=company_gw anyc.dcdcb.com
2. 开启 IP 转发(极其重要) 它作为网关,必须允许流量穿透它:
Bash
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 配置 NAT 伪装(让公司内网设备能回包) 当你的笔记本通过 VPN 访问公司内网的打印机或 OA 系统时,那些设备会看到一个陌生的 VPN IP(比如 168.192.1.x)。为了让它们能正常把数据回传给网关,必须做 SNAT:
Bash
# 假设公司机器连接公司内网的真实网卡叫 eth0
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
总结:数据是怎么跑通的?
你的笔记本出差时: 连上 VPS,拿到
168.192.1.x的 IP,同时收到了一条指示:“去192.168.88.x的流量,请发给 VPS”。流量到达 VPS 后: VPS 查阅它的内部路由表,发现:“哦!
192.168.88.0/24这个网段是由账号company_gw(iroute) 认领的!”于是把数据包精准投递给公司服务器。流量到达公司服务器: 公司服务器通过
iptablesNAT 把数据包伪装成自己的局域网 IP,扔给公司内网。内网设备处理完后原路返回。
评论区