前のコードにはいくつかの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