web-dev-qa-db-ja.com

NAT iptablesPREROUTINGチェーン経由で動作する)を取得できません

ですから、なぜ、そしてどのように私たち自身を気にするのではなく、私がここでどこが間違っているのか誰かが知っているかどうかを見たいと思います。

基本的に、ループバックデバイス(169.254.169.254)にエイリアスしたIPでポート80に向かうすべてのパケットを転送して、別のIPのポート8080に転送したいと思います。これはたまたまのパブリックIPです。同じボックス(この質問では1.1.1.1を使用します)。そうすることで、私は[表向きに]走ることができるはずです

telnet 169.254.169.254 80

1.1.1.1:8080に到達しますが、これは発生していません。

これがiptablesの私のnatテーブルです:

~# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 66 packets, 3857 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            169.254.169.254      tcp dpt:80 to:1.1.1.1:8080

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

何か不足していますか? iptablesのmanページと以下のリンクのほとんどの情報をたどっていますが、telnetの試行中に「接続が拒否されました」というメッセージが表示されます。追加しようとしました~#iptables -t nat -A POSTROUTING -j MASQUERADE私のiptablesに、しかし役に立たない:/

誰かが私を正しい方向に向けることができれば、それは驚異的です!

http://linux-ip.net/html/nat-dnat.html

https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4033.html

[〜#〜] edit [〜#〜]私は実際に次のsysctlパラメーターを有効にしていることを追加したかった~# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1

EDIT No. 2natテーブルv.sのOUTPUTチェーンにルールを追加することでこれを解決できました。私が最初に試したPREROUTINGチェーン。

5
Andre Goree

カーネルモジュール「br_netfilter」がホストマシンにロードされていることを確認することで、実際にこれを機能させました。それはそれと同じくらい単純で、長い間困惑した後、迷惑なほど単純でした。

解決策に導いたドキュメント/記事:

1)

https://github.com/omribahumi/libvirt_metadata_api および https://thewiringcloset.wordpress.com/2013/03/27/linux-iptable-snat-dnat/

「iptablesの設定」セクションを参照してください。「REDIRECT」の代わりに「DNAT」を使用しています。bc「REDIRECT」は、宛先NATの場合のように削除されたアドレスに転送するのではなく、単にトラフィックをローカルシステムのインターフェイスにリダイレクトします。

2)

https://serverfault.com/questions/179200/difference-beetween-dnat-and-redirect-in-iptables および https://www.netfilter.org/documentation/HOWTO /NAT-HOWTO-6.html

上記のように、REDIRECTとDNATの違いを理解するのに役立ちました。

3)

https://github.com/omribahumi/libvirt_metadata_api/pull/4/files

このコミットにより、実際の解決策が導き出されました(上記のことは以前に行っていましたが、役に立ちませんでした)。

0
Andre Goree

はい、ローカルで生成されたパケットはPREROUTINGテーブルを通過しないため、dnatOUTUPTテーブルに配置する必要があります。

1
Arash