プライベートWebサーバーにプロキシサーバー+P2Pで安全にアクセスする
August 18, 2026
社内にあるコンテンツやシステムなどの「プライベートWebサーバー」については、社内LAN環境にあるPCからのアクセスに制限されていると思います。 また、社外からアクセスする場合は、PCからVPN環境を経由して社内LANに入るようになっていると思います。 ただ、一般的なVPN環境においては、その脆弱性を付かれて攻撃を受けるといったセキュリティ課題が顕在化しています。 そこで、「プロキシサーバー+P2P」による社外から安全にプライベートWebサーバーへアクセスする環境の構築を提案したいと思います。
なぜ、「プロキシサーバー+P2P」なのか
一般的なVPN環境では、専用のサーバー機器+ソフトによって「社内(安全)と社外(危険)」の境界をネットワーク的に作る仕組となっており、社内LANへの入口となるVPNサーバー機器は、インターネットに公開されています。
そのため、VPNサーバー機器は攻撃対象になりやすく、その脆弱性を付かれて突破された場合は、社内ネットワーク全体に不正アクセスされるリスクがあります。
そこで、「プロキシサーバー+P2P」による社内LANとPC間に独立したプライベートアクセス環境を構築し、社内LANへの入口となるインターネット公開そのものを排除することで不正アクセスに対する安全性を担保できると考えました。
アクセス環境の概要
アクセス環境は、プライベートWebサーバーにアクセスできるネットワーク内にフォワードプロキシサーバー「Squid」を設置し、社外のPCは、HTTPプロキシー設定を行います。 そして、PCとプロキシサーバーの間を繋ぐネットワーク環境として「トンネルアプリ」を使用します。 (当方がアプリ開発を行い無料で提供しているP2Pアプリです)
トンネルアプリは、2つの端末にインストールして使用し、一方のアプリでクライアントアプリからのアクセスを代理ポートで受け付け、一方のアプリでサーバーアプリへのアクセスを行います。 端末アプリ間の通信データはEnd-to-Endで暗号化しますので、その内容を第三者に見られることなく安全にアクセスすることができるようになっています。
プロキシサーバー側のセットアップ
プロキシサーバー側のOS環境はLinuxを使用し「Squid」のインストールとセットアップを行います。
「Squid」の詳細については、公式サイト(https://www.squid-cache.org/)などで確認してください。 この記事では、デフォルトの待ち受けポートである「3128」を使用するものとします。
この記事では、プロキシサーバー側と同じネットワーク内からURL「https://private.example.com」でアクセス可能なプライベートWebサーバーが存在するものとします。
※社内専用のプライベートWebサーバーであっても、セキュリティやブラウザの仕様上の理由から、HTTPS(SSL/TLS)通信とログイン認証の導入が推奨されます。
そして、「トンネルアプリ(Linux版)」をインストールして起動します。 すると、コンソール上で以下のメッセージが表示されます。なお、これでLinux PC側の設定は完了で、会社のネットワーク環境の設定変更は不要です。 この例では、トンネルアプリの端末番号が「000001」となっています。
PC側のセットアップ
PC側のOS環境はWindowsを使用し「トンネルアプリ(Windows版)」をインストールして起動します。 すると、以下のコマンドプロンプトとブラウザ画面が表示されます。 この例では、トンネルアプリの端末番号が「000002」となっています。
次に、プロキシサーバー側のトンネルアプリで、この端末をサーバー側端末として登録するためのURLを以下のコマンド「./TunnelApp_Linux.sh reg」で取得し、PC側のブラウザでアクセスします。
すると、プロキシサーバー側のトンネルアプリがサーバー側端末として登録されます。
なお、プロキシサーバー側で、紐付けられたPC側のトンネルアプリの端末番号は、以下のコマンド「./TunnelApp_Linux.sh clients」で確認することができます。
プロキシサーバー側へのアクセスを無効化する場合は、以下のコマンド「./TunnelApp_Linux.sh disable_client:<端末番号>」で変更できます。
プロキシサーバー側へのアクセスを有効化する場合は、以下のコマンド「./TunnelApp_Linux.sh enable_client:<端末番号>」で変更できます。
プロキシサーバー側へのアクセスを削除する場合は、以下のコマンド「./TunnelApp_Linux.sh delete_client:<端末番号>」で変更できます。
続いて、PC側のトンネルアプリでトンネル通信設定を登録します。
「クライアント側端末」では、「端末内のアプリのみ」を選択して「127.0.0.1(ローカルホスト)」からのアクセスに制限し、 Webブラウザーからアクセスを受け付けるための代理ポートとして「23128」を設定します。
「サーバー側端末」には、プロキシサーバー側のトンネルアプリ「000001」を選択し、そこからのアクセス先として「127.0.0.1」とポート「3128」を設定して保存します。
WebブラウザーのHTTPプロキシー設定で、「セットアップスクリプトを使う」をオンにして、以下のURL「http://127.0.0.1:10000/proxy.pac」をセットします。
手動でプロキシサーバーを設定することもできますが、それだとプライベートWebサーバー以外へのアクセスもプロキシサーバーを経由するため、セットアップスクリプトでホスト指定することを推奨します。
そして、PC側のトンネルアプリのWebサーバー機能を利用して配信するため、以下のようにセットアップスクリプト「proxy.pac」を作成してドキュメントルートフォルダ内に保存します。
function FindProxyForURL(url, host) {
// Use a proxy for specific hostnames.
if (host == "private.example.com") {
return "PROXY 127.0.0.1:23128";
}
// All other traffic connects directly.
return "DIRECT";
}
ドキュメントルートフォルダの場所
ZIPファイルからアプリをインストールした場合:
<トンネルアプリのインストールフォルダ>/docs/proxy.pacMicrosoft Storeからアプリをインストールした場合:
C:\Users\[ユーザー名]\AppData\Local\Packages\[パッケージ固有の英数字].TunnelApp-PrivateAccess_[パッケージ固有の英数字]\LocalCache\Roaming\tunsock\docs\proxy.pac
Webブラウザーから「https://private.example.com」でアクセスすると、サンプルのプライベートWebサーバーの画面が表示されます!
トンネルアプリは、クライアント側端末もサーバー側端末も同時接続は最大5件まで可能となっています。 今のところ、サーバー側端末の登録件数については制限を設けていませんが、複数人で共用すると同時接続制限にかかる可能性が高くなります。
最後までお読みいただきありがとうございました!ご意見などございましたらメッセージをお寄せいただけると幸いです。
P2P · Web · Security


