web-dev-qa-db-ja.com

プロキシサーバーを介してインターネットにHTTPリクエストを送信します

インターネットに直接アクセスできないクライアントがいます。ただし、サーバーはインターネットにアクセスできるのに対し、LAN接続でサーバーに接続されています。

クライアントからサーバー経由でインターネットにHTTPリクエストを送信したいのですが。これどうやってするの?

+--------+        +--------+        +--------+
|        |  LAN   | Ubuntu |   WAN  |        |
| Client <--------> 16.04  <-------->  WWW   |
|        |        | Server |        |        |
+--------+        +--------+        +--------+

手順:

  1. クライアントはLAN上のサーバーにリクエストを送信します https:// user:pass @ local-server:1234
  2. サーバーはリクエストをリモートエンドポイントに転送します https:// user:pass @ remote-server

注:HTTPリクエストを単一のエンドポイントに転送するだけで済みます

サーバー上で squid または tinyproxy を実行することを検討してきましたが、それらを適切に構成する方法や、それが最も簡単なアプローチかどうかはわかりません。ここにプロキシサーバーが必要ですか?

1
Ryan R

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

また、インターネットのufwで転送を有効にするための記事を読むこともできます。ここで2つ [1][2] 例。

3