首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转发前通过TUN设备路由所有数据包

转发前通过TUN设备路由所有数据包
EN

Unix & Linux用户
提问于 2020-07-07 15:11:15
回答 1查看 810关注 0票数 0

我有一个应用程序,它创建了一个TUN设备,然后检查该接口上的所有数据包,并将它们写回TUN,以防检查成功。(想想防火墙)数据包的来源是我的防火墙应用程序运行的同一个设备。这台机器(VM,10.0.2.15)可以使用主路由表(不需要设置)到达另一台计算机(主机、192.168.1.151)。我现在的问题是,每当我通过防火墙应用程序发送数据包时,内核似乎都会丢弃它们。具体而言,当我在TUN接口上运行tcpdump时,会看到以下内容:

代码语言:javascript
运行
复制
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
12:24:21.548119 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 1, length 64
12:24:21.548248 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 1, length 64
12:24:22.555972 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 2, length 64
12:24:22.556087 IP 10.0.2.15 > 192.168.1.151: ICMP echo request, id 9967, seq 2, length 64

你可以看到每个包都被记录了两次。一旦它进入我的申请,一旦它出来。然而,从那以后,它似乎消失了。在接口上执行tcpdump --它应该面向我的主机--没有显示任何内容。

我已经在VM机器上配置了以下内容:

代码语言:javascript
运行
复制
# enable forwarding and disable reverse path filtering
sudo sysctl net.ipv4.conf.default.rp_filter=0
sudo sysctl net.ipv4.conf.all.rp_filter=0
sudo sysctl net.ipv4.ip_forward=1

# routes for the packets to take
sudo ip rule add to 192.168.1.151/32 lookup 11 prio 11
sudo ip rule add iif tun0 lookup main priority 10

表11告诉数据包进入我的TUN设备。如tcpdump所示,这是可行的。

我还设置了iptables向前,输出链默认接受。此外,我使用netcat和UDP测试了流量,以排除数据包无法返回的问题。

我遗漏了什么?内核丢弃我的数据包的原因是什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-07-07 18:18:09

我有一个应用程序,它创建了一个TUN设备,然后检查该接口上的所有数据包,并将它们写回TUN,以防检查成功。我现在的问题是,每当我通过防火墙应用程序发送数据包时,内核似乎都会丢弃它们。

内核看到它发送出去的数据包,因此它得出结论,网络中一定有一个路由循环,为了防止网络被淹没,丢弃数据包。

您已经尝试过在rp_filter中禁用该行为,但是您可能还需要设置accept_local,因为您的TUN接口有一个本地地址。

更好的方法是将应用程序真正用作防火墙,让它创建两个TUN接口,一个传入和一个传出,并将其中一个或两者移动到需要时的网络命名空间/VM。

这样,您就可以避免类似于路由循环的内容。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/597213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档