请求解决L2TP服务器后华为B525路由器LAN子网访问问题
折腾这么久没搞定,咱们一步步来拆解问题。核心矛盾是:你的华为B525内网(192.168.8.0/24)能访问VPN设备,但反过来VPS和其他VPN客户端碰不到内网设备。这大概率是路由缺失、IP转发未开启或者防火墙规则拦截导致的,咱们逐个排查:
1. 给VPS和VPN客户端补上路由
VPN侧根本不知道192.168.8.0/24这个网段该往哪发,所以首先得在VPS上添加静态路由,把这个网段的流量导向华为路由器的VPN IP(192.168.42.10):
# 临时生效,重启VPS后会消失 ip route add 192.168.8.0/24 via 192.168.42.10 dev ppp0
注意:
ppp0是xl2tpd对应的VPN接口,你可以用ip addr命令确认实际接口名。
如果要永久生效,不同系统配置方式不同:
- Debian/Ubuntu:写入
/etc/netplan/00-installer-config.yaml(或对应netplan配置文件),添加路由条目 - CentOS/RHEL:创建
/etc/sysconfig/network-scripts/route-ppp0文件,写入192.168.8.0/24 via 192.168.42.10 dev ppp0
另外,其他VPN客户端也需要这条路由,手动加太麻烦,直接在xl2tpd配置里推送:
编辑/etc/xl2tpd/xl2tpd.conf的LNS段,添加推送路由的配置:
[global] ipsec saref = yes [lns default] ip range = 192.168.42.10-192.168.42.20 local ip = 192.168.42.1 push "route 192.168.8.0 255.255.255.0" # 给客户端自动推送内网路由 require chap = yes refuse pap = yes require authentication = yes name = lns pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
重启xl2tpd服务后,新连接的客户端会自动获取这条路由。
2. 开启华为B525的IP转发
华为路由器需要负责转发内网和VPN网段之间的流量,默认可能没开。先登录路由器管理界面,找「高级设置」→「网络转发」或者类似选项,开启「IP转发」功能。
如果界面找不到(有些运营商定制版可能藏得深),若路由器支持SSH登录,登录后执行:
# 临时开启 echo 1 > /proc/sys/net/ipv4/ip_forward # 永久生效 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p
3. 调整VPS的iptables规则
3.1 允许VPN与内网的转发流量
检查VPS的filter表FORWARD链,确保双向流量都能通过:
# 允许VPN网段访问内网 iptables -A FORWARD -s 192.168.42.0/24 -d 192.168.8.0/24 -j ACCEPT # 允许内网回包到VPN网段 iptables -A FORWARD -s 192.168.8.0/24 -d 192.168.42.0/24 -j ACCEPT
如果你的FORWARD链默认策略是DROP,这两条规则必须加;如果是ACCEPT,可以跳过,但建议明确配置更稳妥。
3.2 解决内网回包的SNAT问题
内网设备默认只知道自己的网关(华为B525的192.168.8.1),不知道VPN网段的存在,所以当VPN设备访问内网设备时,内网设备的回包会发往网关,但路由器如果不做地址转换,VPS可能收不到回包。这时候需要在华为路由器上配置SNAT:
# 把内网发往VPN网段的流量源地址改成路由器的VPN IP iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -d 192.168.42.0/24 -j SNAT --to-source 192.168.42.10
如果华为路由器不支持自定义iptables,也可以尝试让路由器通过DHCP给内网设备推送VPN网段的路由,但SNAT是最直接的替代方案。
另外,还要检查VPS上的NAT规则,别把192.168.8.0/24的流量误做MASQUERADE了——正常的互联网流量伪装规则(比如iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE)没问题,但别包含VPN或内网网段。
4. 验证配置
做完上面的步骤,咱们来测试:
- 在VPS上ping华为路由器的内网IP:
ping 192.168.8.1,看是否能通 - 在其他VPN客户端上ping同一个IP,测试连通性
- 尝试访问内网设备的端口,比如
telnet 192.168.8.xxx 80(替换成你内网设备的IP和开放端口)
如果还是不行,再检查两个点:
- 华为路由器的防火墙是否拦截了来自192.168.42.0/24的入站流量,看看有没有禁止VPN网段访问内网的规则
- 检查xl2tpd的ppp配置,编辑
/etc/ppp/options.xl2tpd,确保有ip-forward开启转发
内容的提问来源于stack exchange,提问作者Sokołow




