ArchLinux搭建OpenConnect服务器后客户端无法访问互联网问题求助
ArchLinux搭建OpenConnect服务器后客户端无法访问互联网问题求助
大家好,我在ArchLinux VPS上搭建了OpenConnect服务器,现在Windows客户端能成功连接,但连上后没法访问互联网——ping 8.8.8.8失败,但能正常ping通VPS本身。以下是我已经做的配置和系统状态,麻烦帮忙排查下问题:
已执行的配置命令
首先是创建tun设备并配置IP:
ip tuntap add mode tun dev vpn0 ip addr add 192.168.2.2/24 dev vpn0
重启ocserv服务:
systemctl restart ocserv
配置的iptables规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 8443 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
网络接口状态(ip a输出)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000 link/ether 56:00:04:c4:b9:c3 brd ff:ff:ff:ff:ff:ff inet 66.42.108.48/23 brd 66.42.109.255 scope global dynamic noprefixroute enp1s0 valid_lft 85512sec preferred_lft 85512sec inet6 2001:19f0:6001:5689:5400:4ff:fec4:b9c3/64 scope global dynamic noprefixroute valid_lft 2591893sec preferred_lft 604693sec inet6 fe80::5400:4ff:fec4:b9c3/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: vpn0: <NO-CARRIER,POINTOPOINT,MULTICAST,NOARP,UP> mtu 1500 qdisc fq state DOWN group default qlen 500 link/none inet 192.168.2.2/24 scope global vpn0 valid_lft forever preferred_lft forever
IP转发状态
已经成功开启IPv4转发:
sysctl net.ipv4.ip_forward # 输出:net.ipv4.ip_forward = 1 sysctl -a | grep forwarding | grep ipv4 # 输出: net.ipv4.conf.all.bc_forwarding = 0 net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.all.mc_forwarding = 0 net.ipv4.conf.default.bc_forwarding = 0 net.ipv4.conf.default.forwarding = 1 net.ipv4.conf.default.mc_forwarding = 0 net.ipv4.conf.enp1s0.bc_forwarding = 0 net.ipv4.conf.enp1s0.forwarding = 1 net.ipv4.conf.enp1s0.mc_forwarding = 0 net.ipv4.conf.lo.bc_forwarding = 0 net.ipv4.conf.lo.forwarding = 1 net.ipv4.conf.lo.mc_forwarding = 0 net.ipv4.conf.vpn0.bc_forwarding = 0 net.ipv4.conf.vpn0.forwarding = 1 net.ipv4.conf.vpn0.mc_forwarding = 0
OpenConnect客户端配置
device = vpns0 tcp-port = 8443 ipv4-network = 192.168.2.0/24 route = default
当前问题
- 客户端连接成功,但无法访问互联网
- ping 8.8.8.8失败,但能ping通VPS的公网IP
可能的问题排查方向&解决方案
1. 缺少NAT转发规则(核心问题)
目前你的iptables只配置了INPUT和OUTPUT链,但没有配置POSTROUTING链的NAT规则——这是让VPN客户端流量通过VPS公网接口转发出去的关键。
执行以下命令添加NAT规则(enp1s0是你的公网接口,从ip a输出可确认):
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o enp1s0 -j MASQUERADE
这条规则会把VPN子网(192.168.2.0/24)的流量在通过公网接口转发时,替换成VPS的公网IP,确保外网能正确返回流量。
2. 补充FORWARD链规则
你的iptables当前未配置FORWARD链,而转发流量需要该链允许相关数据包通过。添加以下规则:
iptables -A FORWARD -s 192.168.2.0/24 -j ACCEPT iptables -A FORWARD -d 192.168.2.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
第一条允许VPN客户端的流量转发出去,第二条允许外网返回的关联流量回到VPN子网。
3. 激活vpn0接口
从ip a输出看vpn0接口处于state DOWN状态,虽然ocserv可能在连接时自动激活它,但可以手动启动试试:
ip link set vpn0 up
4. 保存iptables规则(避免重启丢失)
如果上述配置生效,记得保存iptables规则:
iptables-save > /etc/iptables/iptables.rules
然后启用iptables.service确保开机自动加载规则:
systemctl enable --now iptables.service
完成以上配置后,重启ocserv服务,重新连接客户端再测试互联网访问。
备注:内容来源于stack exchange,提问作者Dmitry Bubnenkov
相关产品推荐
相关产品推荐

