だから私たちは「なぜ」に興味があるのではなく、「どのように」にもっと興味があり、私がどこで間違っているのか知っている人がいるのか知りたかったのです。
デフォルトでは、ループバックデバイス(169.254.169.254)でエイリアスされたIPのポート80に向かうすべてのパケットを同じボックスのパブリックIPである別のIPのポート8080に転送したいと思います(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のマニュアルページと以下のリンクのほとんどの情報に従いましたが、Telnetの試行中にまだ「接続が拒否されました」というメッセージが表示されます。私はiptablesに追加しようとしましたが、~#iptables -t nat -A POSTROUTING -j MASQUERADE
役に立ちませんでした/
誰もが私を正しい方向に指すことができれば良いでしょう!
http://linux-ip.net/html/nat-dnat.html
https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4033.html
編集する 次のsysctlパラメータを有効にしたと付け加えたいです。~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
編集者2号 (もともと試みたPREROUTINGチェーンの代わりに)natテーブルのOUTPUTチェーンにルールを追加することでこの問題を解決できました。
ベストアンサー1
私は実際にカーネルモジュール "br_netfilter"がホストシステムにロードされていることを確認してこれをしました。長い間閉じ込められた終わりに、それはあまりにも単純で不気味なほど単純でした。
私を解決策に導いた文書/記事:
1)
https://github.com/omribahumi/libvirt_metadata_apiそしてhttps://thewiringcloset.wordpress.com/2013/03/27/linux-iptable-snat-dnat/
「iptablesの設定」セクションを参照してください。 「REDIRECT」は、トラフィックを宛先NATのように削除されたアドレスではなくローカルシステムのインターフェイスにリダイレクトするため、「REDIRECT」の代わりに「DNAT」を使用しました。
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の違いを理解するのに役立ちます。
三)
https://github.com/omribahumi/libvirt_metadata_api/pull/4/files
このコミットで実際の解決策を見つけることができました(上記の作業は以前は成功しませんでしたが)。