![如果从其他设备接收到数据包,Linux 会丢弃该数据包](https://linux22.com/image/63864/%E5%A6%82%E6%9E%9C%E4%BB%8E%E5%85%B6%E4%BB%96%E8%AE%BE%E5%A4%87%E6%8E%A5%E6%94%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%8CLinux%20%E4%BC%9A%E4%B8%A2%E5%BC%83%E8%AF%A5%E6%95%B0%E6%8D%AE%E5%8C%85.png)
问题描述:
当我在 VPN 客户端和我的家庭服务器之间建立 VPN 连接时,如果连接穿过我的防火墙 (pfSense) 或直接建立,则连接正常。
但是,如果 VPN 客户端直接建立到家庭服务器的连接,并且响应穿过我的防火墙 pfSense,则 VPN 服务器不会将数据包从 LAN 接口 (eth0) 路由到 VPN 接口 (tun0)。
你知道为什么吗 ?
第一个例子好:具有直接连接:
转到:VPN 客户端 => VPN 服务器 => 家庭服务器
返回:主服务器 => VPN 服务器 => VPN 客户端
第二个例子好:与两个连接 accros 防火墙 (pfSense):
转到:VPN 客户端 => VPN 服务器 => 防火墙 pfSense => 家庭服务器
返回:主服务器 => 防火墙 pfSense => VPN 服务器 => VPN 客户端
第三个例子不行:开始时直接连接,后面使用 accros 防火墙 (pfSense):
转到:VPN 客户端 => VPN 服务器 => 家庭服务器
返回:主服务器 => 防火墙 pfSense => VPN 服务器 => VPN 客户端
IP列表:
家庭服务器:192.168.100.50
防火墙 pfSense:192.168.100.20
VPN 服务器:192.168.100.40(接口:eth0)和 10.8.0.1(接口:tun0)
VPN客户端:10.8.0.6
笔记:在第一个和第二个示例中,当我执行 tcpdump 时,我在 eth0 和 tun0 上看到返回数据包。但在第三个中,我在 tun0 上看不到返回数据包,而只在 eth0 上看到返回数据包。
假设:这就像数据包从不同的设备返回时被丢弃一样。
谢谢。
答案1
解决 !
只需添加“浮动规则”即可。在此规则中,“状态类型”中选择“无”。
“none”是一个系统:“不使用状态机制来跟踪。这仅在您在某些情况下进行高级排队时才有用。请检查文档。”
事实上,pfSense 丢弃了数据包,因为它之前没有收到“SYN”标志。当网络遵循非对称路由时,这是一个基本问题和常见问题。