繁体   English   中英

如何使Linux接受发往非本地地址的数据包?

[英]How to get Linux accept packets destined to non-local addresses?

我有一种情况,我们的Linux运行箱必须接收发往非本地地址的数据包。 例如,我没有在盒子的任何接口上配置1 :: 1,但是我想接收发往它的数据包。 我有到达ip6_rcv_finish()的数据包。

此处ip6_input_route()返回指向丢弃函数的dst_entry。 如果我添加1 :: 1的接口之一,我看到ip6_input_route()返回dst_entry wtih ip6_input()数据包是由应用程序通过套接字接收。 有没有一种方法,而不必显式添加地址?

我正在使用IP_BINDTODEVICE和IP_TRANSPARENT选项。 这些选项使我可以将套接字绑定到1 :: 1,即使未在任何接口上配置地址。

如果将邻居路由器/主机配置为到达目的地1 :: 1的路由,以退出您所连接的接口...它将到达您。

IP_TRANSPARENT设置使用TProxy,这是记录在这里 棘手的部分似乎是将数据包发送到套接字绑定到的接口。 调整文档中有关IPv6的说明,您应该执行以下操作:

# Mark packets whose destination IPs match a local socket
ip6tables -t mangle -N DIVERT
ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A DIVERT -j ACCEPT

# Configure policy routing to allow marked packets
ip -6 rule add fwmark 1 lookup 100
ip -6 route add local default dev eth1 table 100

请注意,路由中的eth1是我的套接字绑定到的接口。 您可能需要尝试这些设置才能使其正常工作。 有关更多信息,请参见此处

我在两盒式Vagrant环境中对此进行了测试,并能够成功地通过绑定到伪IPv6地址的套接字执行TCP握手。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM