このIPルーティングルールとはどういう意味ですか?

このIPルーティングルールとはどういう意味ですか?

前のコードにはいくつかのIPルーティングルールがありますが、これが何を意味するのかわかりません。

ip route flush table 100
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

答え1

一度に1行ずつ:

ip route flush table 100

IDが100のテーブルを消去する必要があります。

ip rule add fwmark 1 lookup 100

1--set-mark 1テーブル100で参照されるようにマークされたパケット(iptablesにあると推測されます)にルールを追加します。その他のコンテンツip rule文書

ip route add local 0.0.0.0/0 dev lo table 100

すべてのトラフィック(0.0.0.0/0に対応default)をデバイスにルーティングしますlo。つまり、ローカルループバック、ローカルシステムのホットワードを呼び出します。

テーブルIDは整数(例では100)である必要はなく、文字列でもかまいません。ここ興味深い例です。

答え2

このコードは確かにLinuxの透明なプロキシ設定の一部です(iptablesを使用)。socketマッチそしてTPROXYターゲットまたはnftablessocket表現するそしてtproxy氏名)。

Linuxカーネルのドキュメントtproxy.txt:

1. Making non-local sockets work
================================

The idea is that you identify packets with destination address matching a local
socket on your box, set the packet mark to a certain value:

# iptables -t mangle -N DIVERT
# iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
# iptables -t mangle -A DIVERT -j MARK --set-mark 1
# iptables -t mangle -A DIVERT -j ACCEPT

Alternatively you can do this in nft with the following commands:

# nft add table filter
# nft add chain filter divert "{ type filter hook prerouting priority -150; }"
# nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept

And then match on that value using policy routing to have those packets
delivered locally:

# ip rule add fwmark 1 lookup 100
# ip route add local 0.0.0.0/0 dev lo table 100

最初のコマンドは、表示されたパケットの代替ルーティングテーブルを選択します。 2番目のコマンドは、このルーティングテーブルに何かを追加します。つまり、パケット(ルーティングする必要がありましたが、方向が変わります)を傍受してローカルシステムに到達するようにします。

上記の最初の部分は保留状態です。宛先アドレスはデフォルトのホストアドレスではありませんが、IP_TRANSPARENTソケットオプションを有効にしてローカルソケットにまだ存在するため、送信された接続(以下の部分を介して)は引き続き送信されます。

Note that for this to work you'll have to modify the proxy to enable (SOL_IP,
IP_TRANSPARENT) for the listening socket.

この問題を処理するには、専用アプリケーションが必要です。例えばイカまたはハエージェント次の tproxy ルールに一致する十分な構成を用意してください。

The 'TPROXY' target provides similar functionality without relying on NAT. Simply
add rules like this to the iptables ruleset above:

# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
  --tproxy-mark 0x1/0x1 --on-port 50080

Or the following rule to nft:

# nft add rule filter divert tcp dport 80 tproxy to :50080 meta mark set 1 accept

関連情報