You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux环境下VPN路由问题:无法从服务器B访问VPN客户端侧的192.168.1.0/24网段

Linux环境下VPN路由问题:无法从服务器B访问VPN客户端侧的192.168.1.0/24网段

咱们一步一步来排查解决这个问题,核心要确保服务器A的转发功能正常,同时远程MikroTik配置了返回路由,下面是具体操作步骤:

1. 先开启服务器A的IP转发功能

Linux默认关闭IP转发,哪怕防火墙已经禁用,这个设置不开启的话,服务器A根本没法把来自服务器B的数据包转发到ppp0接口。

  • 先检查当前状态:

    sysctl net.ipv4.ip_forward
    

    如果返回net.ipv4.ip_forward = 0,说明没开启。

  • 临时开启(重启后失效):

    sysctl -w net.ipv4.ip_forward=1
    
  • 永久开启(重启后依然生效):
    编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward=1这一行,去掉前面的注释符号#,然后执行:

    sysctl -p
    

    让配置立即生效。

2. 验证服务器A和B的路由配置是否生效

  • 服务器A这边,你已经添加了192.168.1.0/24 via 192.168.42.10 dev ppp0,执行ip route show确认这条路由存在,同时用ip link show ppp0检查ppp0接口是否处于UP状态。
  • 服务器B这边,你添加的192.168.1.0/24 via 10.9.96.3 dev enp8s0也要确认存在,执行ip route show就能看到。可以在B上跑个traceroute 192.168.1.1(替换成实际的客户端IP),看数据包是不是能到达服务器A的10.9.96.3地址。

3. 关键:给远程MikroTik添加返回路由

这是很多人容易漏掉的点!现在MikroTik只知道把192.168.1.0/24的流量发给服务器A,但它不知道10.9.96.0/20(服务器B所在的LAN网段)的数据包该怎么返回。

你需要在MikroTik上添加一条静态路由:

/ip route add dst-address=10.9.96.0/20 gateway=192.168.42.1

这条路由的意思是:所有目标是10.9.96.0/20的流量,都发给服务器A的ppp0地址(192.168.42.1),这样MikroTik收到服务器B的数据包后,才能正确返回。

4. 排查反向路径过滤(可选)

如果上面几步都做了还是不通,检查服务器A的反向路径过滤设置,这个可能会阻止跨接口的转发:

  • 检查当前状态:
    sysctl net.ipv4.conf.all.rp_filter
    
  • 如果返回1,临时关闭测试:
    sysctl -w net.ipv4.conf.all.rp_filter=0
    
    如果关闭后能通了,就把这个配置永久写到/etc/sysctl.conf里。

5. 用tcpdump验证数据包流向

可以在服务器A上抓包,确认数据包的走向:

  • 查看是否收到来自服务器B的数据包:
    tcpdump -i enp8s0 host 10.9.96.4 and host 192.168.1.x
    
  • 查看是否转发到ppp0接口:
    tcpdump -i ppp0 host 192.168.42.10 and host 192.168.1.x
    

如果能看到数据包从enp8s0进来,却没从ppp0出去,那大概率是IP转发没开;如果ppp0有出去的数据包但没返回,那就是MikroTik的路由没配置对。

备注:内容来源于stack exchange,提问作者Emiliano Spada

火山引擎 最新活动