![iptables PREROUTING でドメインを使用する](https://rvso.com/image/617275/iptables%20PREROUTING%20%E3%81%A7%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B.png)
私は IP を持っており、www.example.com
ポートX.X.Y.Y
80 からドメイン (www.example.com) にトラフィックを転送したいので、次の iptable を使用しました。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination X.X.Y.Y:80
X.X.Y.Y
しかし、コンテンツがドメイン (www.example.com) と等しくないため、良い結果が得られません。
たとえば、198.252.206.16
ブラウザで (serverfault の IP) にアクセスすると、その結果が表示され、アドレス (IP アドレス) のコンテンツは等しくありませんwww.serverfault.com
。
上記の iptables ルールでドメインを使用したいのですが、たとえば--to-destination www.example.com
(これは単なる例であり、機能しないことはわかっています)、どうすればいいですか?
iptables を使用せずにこれを行う別の方法はありますか?
ありがとうございます
答え1
必要なのは、リクエスト ヘッダーの書き換えを行う HTTP プロキシだと思います。IPTables は HTTP ヘッダーを解析して、その中のドメインを置き換えません。
これを実行するには、Nginx や Squid など、HTTP リクエスト ヘッダーを理解して必要なドメインに書き換えるものを検討する必要があります。
IPTables は TCP または UDP よりも上位のプロトコルを認識しません。
答え2
iptables
ドメイン名は iptables の起動時にロードされるため、オプションを使用してもこれを行うことはできません-d
。必要な操作を実行する正しい方法は、Squid などのプロキシ サーバーを使用することです。
答え3
ウェブサーバーで次のようにします。
NameVirtualHost *:80
<VirtualHost *:80>
# The DNS1 site is hosted locally
ServerName DNS1
DocumentRoot /var/www./...
</VirtualHost>
<VirtualHost *:80>
ServerName DNS2
# Forward all requests to container:
Proxypass / http://<container-ip>
ProxypassReverse / http://<container-ip>
</VirtualHost>