インターネットに直接アクセスできないクライアントがいます。ただし、サーバーはインターネットにアクセスできるのに対し、LAN接続でサーバーに接続されています。
クライアントからサーバー経由でインターネットにHTTPリクエストを送信したいのですが。これどうやってするの?
+--------+ +--------+ +--------+
| | LAN | Ubuntu | WAN | |
| Client <--------> 16.04 <--------> WWW |
| | | Server | | |
+--------+ +--------+ +--------+
手順:
注:HTTPリクエストを単一のエンドポイントに転送するだけで済みます
サーバー上で squid または tinyproxy を実行することを検討してきましたが、それらを適切に構成する方法や、それが最も簡単なアプローチかどうかはわかりません。ここにプロキシサーバーが必要ですか?
2つの解決策があります。最初に-configure NAT on server、Second-configure HTTP Proxy。したがって、私の観点からすると、状況に応じて-NATを構成するため、追加のソフトウェアをインストールする必要はありません。ファイアウォールを設定するだけです。
iptables
で設定するには、次の2つの手順を実行する必要があります。
まず、カーネルでパケット転送が有効になっていることを確認します
# echo 1 > /proc/sys/net/ipv4/ip_forward
以下の行を/etc/sysctl.conf
に追加して、永続的にすることもできます。
net.ipv4.ip_forward = 1
次に、iptables
構成に2つのルールを追加する必要があります。
-A PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination internet-ip:1234
-A POSTROUTING -p tcp -m tcp --dport 1234 -j MASQUERADE
それはコマンドによって行うことができます:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination internet-ip:1234
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 1234 -j MASQUERADE
これで、転送ブロックのルールがないことを確認する必要があります。これは-A FORWARD -j REJECT --reject-with icmp-Host-prohibited
のようになります。存在する場合は、次のコマンドで削除できます。
iptables -t filter -D FORWARD -j REJECT --reject-with icmp-Host-prohibited