如何通过手动编写的过滤器在两个网络接口之间传递数据包?

问题描述 投票:0回答:1

我在Linux机器上有两个物理网络适配器:eth0和eth1。 eth0适用于用户,eth1具有外部网络访问权限。然后,我可以执行iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE,并且用户可以连接到NAT后面的网络。

我想做的:手动从eth0捕获数据包,对其进行检查(可能进行一些更改,转储等),然后写回eth1。像这样的东西:

         +-------------------------------------+
         |            / my program \           |
user --- |eth0 ----- |tap0 --- tap1| ----- eth1| --- Network
         +-------------------------------------+

我已经编写了一个程序,打开tap0和tap1,只需从tap0读取并写入tap1,反之亦然(暂时没有数据包更改:]

tap0 192.168.100.1
tap1 192.168.200.1

然后:

ip route add <outer network IP> via 192.168.100.1
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE

我也尝试过;

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE`)

我看到ARP请求在tap0上传入,并从tap1传出(由我的程序重复),但仅此而已。

如何制作此数据包到eth1?如何使eth0上的所有传入数据包通过我的过滤器并到达外部网络(不仅是特定地址)?

我在Linux机器上有两个物理网络适配器:eth0和eth1。 eth0适用于用户,eth1具有外部网络访问权限。然后我可以做iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE和...

routes iptables
1个回答
0
投票

我的问题有一个更好的解决方案:使用NFQUEUE!

© www.soinside.com 2019 - 2024. All rights reserved.