侧边栏壁纸
博主头像
百晓生 博主等级

Keep Share Keep Geek

  • 累计撰写 14 篇文章
  • 累计创建 28 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

记录一次L2TP 组网无法访问内网服务的问题

Administrator
2025-10-31 / 0 评论 / 0 点赞 / 13 阅读 / 0 字

场景

异地组网,多台机器有异地访问需要,所以必须开l2tp隧道互访。
1.网络环境为 unraid 虚拟机+ikuai 主路由+istoreOS 旁路由+黑群晖

2.两个地方通过公网做了l2tp隧道,实现异地互访。

3..旁路由关dhcp,主路由dhcp分配旁路由ip做网关。

出现问题:

1.异地互访出现问题,旁路由,群晖,异地访问不了,本地可以。

2.修改访问不了设备的网关为主路由,问题解决,但是不能始终不太方便。

3.一些docker业务,也是一样的问题,需要异地访问就只能设置主路由为网关

4.所有需要端口映射的主机,网关设置为旁路由的,都失效了。

分析问题

首先,理解问题的根源:流量“有去无回”

我们先分析一下没有这三条规则时,网络为什么会出问题。

  1. 你的设定

    • 主路由 (Main Router):IP地址比如是 192.168.1.1。它负责拨号、L2TP隧道、端口映射和DHCP。
    • 旁路由 (Side Router):IP地址比如是 192.168.1.2。它负责一些插件功能。
    • 你的设备 (PC/Docker/群晖):IP地址比如是 192.168.1.100。它的网关被DHCP设置成了旁路由 192.168.1.2
    • 异地设备:IP地址比如是 192.168.2.50
  2. 问题场景:访问异地设备

    • 你的设备 (192.168.1.100) 要访问异地设备 (192.168.2.50)。
    • 数据包发出:源地址是 192.168.1.100,目标地址是 192.168.2.50
    • 因为网关是旁路由(192.168.1.2),所以这个包先被发给了旁路由。
    • 旁路由收到包,它的默认设置是把所有经由它的流量都做一次NAT (网络地址转换),也就是把源地址伪装成它自己的地址 (192.168.1.2),然后再发出去。
    • 此时,旁路由需要把这个包发给主路由,因为只有主路由连接着L2TP隧道。
    • 主路由收到了一个被修改过的包:源地址是 192.168.1.2 (而不是 1.100),目标地址是 192.168.2.50
    • 主路由通过L2TP隧道把包发给异地设备。
    • 异地设备 (192.168.2.50) 成功收到了包,它要回复。它看到的源地址是 192.168.1.2,于是它把回程的包发给 192.168.1.2
    • 问题来了:这个回程的包通过隧道回到主路由,主路由再发给旁路由。但是旁路由可能已经不认识这个连接了,或者它的NAT表处理出现混乱,不知道该把这个包转给谁(不知道最初是 192.168.1.100 发起的)。最终导致你的设备收不到回复,连接超时,访问失败。

端口映射失效也是同理。外网请求通过主路由映射给你 192.168.1.100 这个设备,你的设备回复时,流量走了旁路由,旁路由对它做了NAT,导致回程的包源地址变了,破坏了整个TCP连接状态,所以映射失效。

这叫做 “路由不对称 (Asymmetric Routing)” 加上 “错误的NAT” 导致的通信失败。

解决办法:

主路由dhcp仍旧分配旁路由ip做网关。端口映射只需要在主路由上设置。(设置完重启防火墙)

这三条规则要加在旁路由上。它们的核心思想是:告诉旁路由,对于局域网内部设备之间的流量,你不要多管闲事(不要做NAT),直接放行就行了。

nano /etc/rc.local

iptables -t nat -I POSTROUTING -o br-lan -j ACCEPT
iptables -t nat -I PREROUTING -i br-lan -j ACCEPT
iptables -I FORWARD -i br-lan -o br-lan -j ACCEPT

总结

这三条规则合在一起,完美地实现了对流量的精细化控制:

  • 如果是访问外网(需要“师夷长技以制夷”):流量从你的设备到旁路由,旁路由发现目标是外网,就把流量从它的WAN口发出,并正常进行NAT伪装。这部分功能不受影响
  • 如果是访问局域网其他设备(包括主路由和异地网络):流量从你的设备到旁路由,旁路由根据路由表判断目标还是在局域网内(需要发给主路由),于是这三条规则生效,告诉旁路由:“这是内部事务,你别改地址,也别拦着,让它原封不动地过去就行了”
0

评论区