OpenConnect服务器配置UFW IP转发后客户端无法访问互联网
看起来你已经完成了OpenConnect服务器的基础部署,但卡在了客户端联网的关键环节——这种情况在AWS Lightsail环境里确实容易因为网络细节踩坑,我帮你一步步排查和解决:
1. 先排查AWS实例的网卡名(大概率是核心问题)
你在UFW的NAT规则里写了-o eth0,但Ubuntu 20.04在AWS Lightsail上的默认网卡名不是eth0,通常是ens5或者类似的名称。网卡名不对的话,MASQUERADE规则根本不会生效,这就是客户端无法联网的核心原因之一。
执行以下命令查看服务器的实际外部网卡:
ip addr show找带有公网IP的那个网卡(通常标注
inet x.x.x.x/24,x.x.x.x是你的服务器公网IP),比如输出里的ens5。修改
/etc/ufw/before.rules里的NAT规则,把eth0替换成你找到的实际网卡名:-A POSTROUTING -s 10.10.10.0/24 -o ens5 -j MASQUERADE
2. 确保UFW转发功能完全开启
你已经加了转发规则,但还要确认UFW本身允许转发:
- 编辑
/etc/default/ufw,找到DEFAULT_FORWARD_POLICY,把它改成:DEFAULT_FORWARD_POLICY="ACCEPT" - 执行命令重启UFW生效:
sudo ufw disable && sudo ufw enable
3. 检查OpenConnect的路由配置
你的ocserv配置里注释掉了#route = default,这会导致客户端只有VPN子网的流量走隧道,互联网流量还是用本地网关。要让所有流量都通过VPN转发,必须开启这条规则:
- 编辑
/etc/ocserv/ocserv.conf,取消route = default的注释:route = default - 重启ocserv服务:
sudo systemctl restart ocserv
4. 验证IP转发和NAT规则是否生效
先确认IP转发已经开启:
sysctl net.ipv4.ip_forward正常应该返回
net.ipv4.ip_forward = 1,如果是0,重新执行sudo sysctl -p /etc/sysctl.d/60-custom.conf。客户端连接VPN后,在服务器上查看NAT规则的匹配次数:
sudo iptables -t nat -vL POSTROUTING看你添加的MASQUERADE规则那一行的
pkts和bytes数值,如果连接客户端后数值在增加,说明NAT规则已经在工作了;如果还是0,那还是网卡名或者子网配置的问题。
5. 确认AWS Lightsail的防火墙配置
除了服务器的UFW,还要检查Lightsail控制台的实例防火墙:
- 确保已经允许**入站的443端口(TCP)**用于OpenConnect连接;
- 确保出站规则允许所有流量(默认是允许的,但如果改过的话要确认),因为服务器需要替客户端转发互联网请求。
关于你看到的.ap-northeast-2.compute.internal后缀
这个是AWS内部的DNS解析主机名,不是问题——iptables在显示IP时会反向解析成主机名,不影响规则的实际功能,不用在意这个。
按照上面的步骤调整后,再测试客户端的联网功能,应该就能解决问题了。
备注:内容来源于stack exchange,提问作者ARK1375

