インターフェイスで受信したすべてのトラフィックをループバックしたいです。これは回線/施設のループバックと同じです。一つに従うエマルジョン、私はこれをした:
iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -j ACCEPT
しかし、送信者は何のメッセージも受け取りませんでした。パケットは受信インターフェイスで破棄されます。鉱山にはnet.ipv4.ip_forward = 1
電線はありません/etc/sysctl.conf
。
ベストアンサー1
ルーティング
カーネルパケットがどこに行くかを決定する基本的な方法は、ファイアウォールルール(、)ip route
ではなくルーティングテーブル(および友達)です。 IP転送を有効にすると、カーネルはルーティングテーブルを介して着信パケットを処理して再送信します。したがって、10.0.0.2のトラフィックがどこから来たかに関係なくeth0を通過させるには、次の手順を実行します。iptables
nftables
net.ipv4.ip_forward = 1
ip route add 10.0.0.2/32 dev eth0
デフォルトでは、カーネルはトラフィックがeth0に入り、すぐに戻ることを確認すると、ICMPリダイレクトを送信してソースマシンに「これは非効率的です。直接送信してください!オフにする必要があります(net.ipv4.conf.eth0.send_redirects = 0
)」 。この機能をオフにすることもできます(net.ipv4.conf.eth0.rp_filter = 0
)。
これは、カーネルルーティングメカニズムを介してIP TTLを減らすなど、必要な作業が行われます。ただし、送信元や宛先のIPアドレスなどは変更されません。
ルーティング+ NAT
送信元または宛先のIPアドレスも変更する必要がある場合は、上部にNATを追加できます。たとえば、送信元IPアドレスがローカルである必要がある場合は、次のように追加できます。
iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
デフォルト値を変更しない限り、FORWARDはすでに承認されている必要があります。そうでない場合は、ルールを追加したり、デフォルトのルールを変更したりできます。
ネットワークアドレス変換+ルーティング
パケットが入ってくるときに宛先 IP アドレスを変更することもできます。これにより、ルーティング方法が変更されます(この変更は、ルーティングが確認される前に行われるため)。これは次のとおりです。
iptables -t nat -A PREROUTING -s 10.0.0.1 -j DNAT --to-dest 10.0.0.2
--out-interface
出力インターフェイスはルーティング後にのみ知られているため、ここでは使用できません。--in-interface
しかし、あなたはそれを使用することができます。
既存ツール
皆さんもぜひご覧くださいiperf3そしてパケットジェネレータ。