fwmarkおよびポリシールーティングを使用すると、発信TCP接続に「到達不能」応答がありません。

fwmarkおよびポリシールーティングを使用すると、発信TCP接続に「到達不能」応答がありません。

ローカルで生成されたトラフィックをルーティングしたいと思います。

  • インターフェイス「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

このトピックに関連しているように見えるいくつかのスレッドを見つけました。

残念ながら、TCPについても「Network Unreachable」が表示されない理由はまだ理解されていません。誰かが私にこれを説明できますか?

私は3.16.7-ckt25-1 amd64カーネルを使用しています。

ポリスチレン

私も持っている解放するnetdevメーリングリストに移動します。

ベストアンサー1

おすすめ記事