簡體   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