我今天花了很多时间想办法做到这一点,但找不到解决办法。在我看来这应该是可能的。我正在尝试设置以下设置:
读取tap1
接口并转发到enp0s3
使用 Go应该工作没有任何问题……我希望。如果我做了,ping 10.0.0.10 -I tap1
我可以在 Go 应用程序中看到以太网帧。(我目前使用https://github.com/songgao/water但我可能会移居到https://github.com/mdlayher/packet如果我能让它工作的话)
我遇到的问题是将以太网帧从转发enp0s8
到tap1
接口。我尝试了多个命令,但没有效果。我尝试使用iptables
:
iptables -A FORWARD -i enp0s8 -o tap1 -j ACCEPT
和类似的命令。
然后我发现了这个问题:Tap0 未接收流量Sherwood Wang 说道:
If you want to force tap0 to recieve its own IP packets, you may use ebtables. When packets are DROPed in the ethernet layer of tap0 at broute table, these packets go into the the IP layer of tap0 instead of eth0. See also: http://ebtables.sourceforge.net/examples/real.html#example1
听起来这正是我需要的。我想我在这里找到了他所指的命令:https://ebtables.netfilter.org/examples/basic.html#ex_brouter
ebtables -t broute -A BROUTING -p ipv4 -i tap1 --ip-dst 172.16.1.1 -j DROP
但是我得到了以下错误:ebtables: No chain/target/match by that name
。如果我查看,man ebtables
我看不到broute
提到的表格。但我在这里看到了https://linux.die.net/man/8/ebtables。那么我是否遗漏了什么?
我也尝试ebtables -A FORWARD -i enp0s8 -o tap1 -j ACCEPT
过https://www.linuxquestions.org/questions/linux-networking-3/ebtables-to-setup-forwarding-and-ethernet-level-nat-4175538316/但这也不起作用。
答案1
已经过去几个月了,您可能还会遇到这个问题,或者其他人将来可能会偶然发现这篇文章。我也遇到过同样的情况。看来 broute 并未内置于当前版本的 ebtables 中。使用命令 ebtables-legacy 并使用相同的选项(我使用的是 accept 而不是 drop),它会将规则添加到 broute 表中并按预期运行