このリポジトリは、Docker Composeを用いてVPN経由でアクセスを行うサンプルです。
複数のDockerコンテナ(アプリケーション、Selenium、VPN)を連携させ、VPN経由でWebアクセスを実現します。
- app: Pythonアプリケーション(例: requestsやSeleniumでWebアクセス)
- selenium: Selenium Standalone(Chrome)
- gluetun: VPN接続用コンテナ(OpenVPN)
- autoheal: ヘルスチェック失敗時に自動再起動するユーティリティ
-
VPN設定ファイルの取得
VPN Gate からOpenVPN設定ファイル(.ovpn)をダウンロードしてください。
スコアが高く、Pingが低いサーバーを選ぶのがおすすめです。
※ IPアドレスが埋め込まれている.ovpnファイルを選択してください(gluetunはDDNSでの接続をサポートしていません)。 -
VPN設定ファイルの配置
ダウンロードした.ovpnファイルをgluetun/openvpn/myvpn.ovpnにリネームして配置します。cp /path/to/downloaded/vpngate_*.ovpn ./gluetun/openvpn/myvpn.ovpn
注意事項
- VPN Gateのサーバーは定期的に変更されるため、接続できない場合は別のサーバーの設定ファイルを試してください。
VPN を使わず、通常のネットワーク経由で外部サイトにアクセスした場合の挙動例です。
flowchart LR
subgraph Docker_Network
app["app"]
selenium["selenium"]
end
app -- "selenium:4444" --> selenium
app --> Internet["Internet"]
selenium --> Internet
$ docker compose -f docker-compose.yml up --build
...
app-1 | [Selenium] Your IP address is: 203.0.113.10
app-1 | [Requests] Your IP address is: 203.0.113.10
# 203.0.113.10 は例ですSelenium経由・requests経由ともにホストのグローバルIPアドレスが表示されます。
VPNを使わない場合、全ての通信は通常のネットワーク経由となります。
VPN を利用し、VPN経由で外部サイトにアクセスした場合の挙動例です。
flowchart LR
subgraph Docker_Network
app["app"]
selenium["selenium"]
gluetun["gluetun"]
end
app -- "localhost:4444" --> selenium
app --> gluetun
selenium --> gluetun
gluetun -- "VPNトンネル" --> vpnserver["外部VPNサーバ"]
vpnserver --> Internet["Internet"]
$ docker compose -f docker-compose.yml -f docker-compose.gluetun.yml up --build
...
app-1 | [Selenium] Your IP address is: 219.100.37.170
app-1 | [Requests] Your IP address is: 219.100.37.170
# 219.100.37.170 は例ですSelenium経由・requests経由ともにVPNで割り当てられたグローバルIPアドレスが表示されます。
VPNを使うことで、通信経路がVPNトンネルに切り替わることを確認できます。
- VPN経由でのWebスクレイピングや自動テスト
- Seleniumを使ったブラウザ操作のVPNトンネリング
Hatena Blog記事: