ローカルで生成されたトラフィックをルーティングしたいと思います。
- インターフェイス「A」を介してホスト「H」のTCPポート「A」で、
- インターフェイス"B"を介してホスト"H"のTCPポート"B"に。
インターフェース「B」が使用できない場合があります。その後、ユーザーがTCPポート「B」に接続しようとすると、カーネルは「ネットワーク接続不可」エラーをユーザーに通知したいと思います。
次の設定を試しました(インターフェース「B」がダウンしている場合)。
# iptables -t mangle -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 2 packets, 120 bytes)
pkts bytes target prot opt in out source destination
2 120 MARK all -- * * 0.0.0.0/0 host-H-ip MARK set 0x64
(単純化のため、このルールにはまだポートは含まれていません。)
# ip rule
0: from all lookup local
32765: from all fwmark 0x64 lookup 200
32766: from all lookup main
32767: from all lookup default
# ip route show table 200
prohibit default
インターフェイス「B」が使用可能で、200 テーブルに一般的なルーティング規則が含まれている場合、これは驚くべきことではありません。
ただし、インターフェイス "B"が利用できない場合にのみICMPとUDPで満足のいく結果が得られます。
$ ping host-H-ip
PING host-H-ip (host-H-ip) 56(84) bytes of data.
ping: sendmsg: Network is unreachable
$ nc -nuv host-H-ip 5000
(UNKNOWN) [host-H-ip] 5000 (?) open
foo
too many output retries : Network is unreachable
TCPの場合は中断されます。
$ nc -nv host-H-ip 5000
このトピックに関連しているように見えるいくつかのスレッドを見つけました。
- http://marc.info/?l=linux-netdev&m=136633466813095&w=2
- http://www.spinics.net/lists/netdev/msg281954.html
- http://netfilter-devel.vger.kernel.narkive.com/8ggjpr4G/netfilter-core-mangle-table-rules-are-not-taken-into-account-in-preliminary-routing-decision
残念ながら、TCPについても「Network Unreachable」が表示されない理由はまだ理解されていません。誰かが私にこれを説明できますか?
私は3.16.7-ckt25-1 amd64カーネルを使用しています。
ポリスチレン
私も持っている解放するnetdevメーリングリストに移動します。