127.1.1.1:10000 などの特定の IP アドレス/ポートに要求を送信する Alpine で実行されるアプリケーションがあります。特定のIPアドレス/ポートを変更することはできません。アクセスしようとしているサービスは、216.58.193.64:80(Googleホームページアドレス)などの他のIPアドレス/ポートにあります。
トラフィックアウトバウンド要求を127.1.1.1:10000から物理アドレス216.58.193.64:80にリダイレクトする方法を探しています。このリダイレクトは双方向です。つまり、アプリケーションが要求して応答を期待します。
グラフィック的には
Alpine (with --cap-add=NET_ADMIN)
IP assigned
╔════════════════════════════════════╗ ╔══════════════════╗
║ ║ ║ ║
║ ┌──────────────────────────────┐ ║ -request-> ║ Remote ║
║ │ Application │ ║ ║ service ║
║ │ requests at 127.1.1.1:10000 | ║ ║ at ║
║ └──────────────────────────────┘ ║ <-reply- ║ 216.58.193.64:80 ║
║ ║ ║ ║
╚════════════════════════════════════╝ ╚══════════════════╝
iptablesを使用しようとしています。
iptables -t nat -I OUTPUT --destination 127.1.1.1 -j DNAT --to-destination 216.58.193.64
iptables、クエリ時にOUTPUTのみが含まれます。
Chain OUTPUT (policy ACCEPT 7 packets, 345 bytes)
num pkts bytes target prot opt in out source destination
1 10 586 DNAT all -- * * 0.0.0.0/0 127.1.1.1 to:216.58.193.64
その後、基準として試してください。
curl 216.58.193.64
返信は
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
しかし、私が試したとき
curl -v 127.1.1.1
これはカールを返さず、出力もありません。報告後停止:
curl -v 127.1.1.1
* Trying 127.1.1.1:80...
* TCP_NODELAY set
私もPOSTROUTINGを試しました
iptables -t nat -A POSTROUTING --destination 127.1.1.1 -j SNAT --to-source 216.58.193.164
しかし、私は同じ結果を得ます。
ベストアンサー1
@ibrahimは部分的に正確ですが、明らかに不完全です。
~からhttps://serverfault.com/questions/247623/iptables-redirect-local-connections-to-remote-system-port、次の作品
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 10000 -j DNAT --to-destination 216.58.193.164
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1
その後、次を実行できます。
curl 216.58.193.164:10000
正しい結果を得てください。
コンテナで実行する場合は、次のコマンドを使用してコンテナを起動する必要があることに注意することも重要です。--privileged