1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NordvpnをDocker上で動かしてproxyにする

Last updated at Posted at 2024-08-18

背景

スクレイピングをする際にnordvpnのWindowsソフトを使用してPCをVPNを繋いでいた

この方法だとスクレイピングではない通信もVPN経由となる為、通信速度が遅くなったりゲームとの接続が切れたり、Googleに接続できないなどの問題に悩まされる。その解消方法の一案としてスクレイピングをNordVPNのProxy経由で行うことにした。

こうすることによりスクレイピングしながらも普通にゲームが出来てGoogle検索もできるのでHappy

手順

使用するDocker Image

Docker hubにあるjeroenslot/nordvpn-proxyを使用する。github

ユーザー名とパスワードを取得する

サービス -> NordVPN -> 手動設定より、ユーザー名とパスワードを取得する。

image.png

Docker準備

Dockerより最新のDockerをダウンロードしてインストールする。
インストール直後、dockerコマンドが使用できなかったら再起動するとdockerコマンドが使えるようになる。使えなかったら手動でパスを通してみてください。

コマンド

docker run -d \
--cap-add=NET_ADMIN \
--name=vpn \
--dns=103.86.96.100 \
--dns=103.86.99.100 \
--restart=always \
-e "USERNAME=<nordvpn_username>" \
-e "PASSWORD=<nordvpn_password>" \
-e "LOCAL_NETWORK=192.168.1.0/24" \
-v /etc/localtime:/etc/localtime:ro \
-v ovpn-data:/app/ovpn/config \
-p 8118:8118 \
jeroenslot/nordvpn-proxy:latest 

ここで使用するusernameとpasswordは一つ前の箇所で取得したものを使用する。

これで、 http://localhost:8118 をproxyとして設定すればnordvpnの接続ができる。

環境変数について

  • USERNAME アカウントのユーザー名
  • PASSWORD アカウントのパスワード
  • LOCAL_NETWORK - ローカルIPネットワークのCIDRマスク(例: 192.168.1.0/24 または 10.1.1.0/24、または複数のネットワーク 192.168.1.0/24,10.1.1.0/24,172.16.2.0/24)。これはクライアントに応答するために必要です。
  • CRON この変数を設定して、デフォルトの15分ごとのチェックを変更できます。これは、LOADがまだOKかどうかを確認するために使用されます。この設定はCRON構文を使用して変更できます。
  • LOAD NordVPN サーバーのロードが75を超える場合、OpenVPNが再起動され、推奨サーバーに接続されます!このチェックはCRONによって15分ごとに行われます。
  • RANDOM_TOP 任意 設定すると、推奨サーバーの上位"x"個からランダムに選択します。有効な値は1からnordが持つサーバー数までの整数です。
  • COUNTRY 任意 NordVPNがサポートする2文字の国コードを使用して、任意の国を選択できます。
  • PROTOCOL 任意 デフォルトはtcpに設定されており、udpに変更できます。
  • SERVER 任意 設定しない場合、推奨サーバーに接続します。設定すると、指定したサーバーに接続します。サーバー名の形式例: us2484.nordvpn.com。
  • REFRESH_TIME 任意 デフォルトは120分です。設定した分数後にのみNordVPN OVPNファイルを再ダウンロードします。

Joentje/nordvpn-proxyEnvironment Variablesより自動翻訳して引用。

動作確認 / 実際のスクレイピングで使用する方法

curl

# proxy無しでIPアドレスを取得
curl https://ifconfig.me
# 経由でIPアドレスを取得
curl -x localhost:8118 https://ifconfig.me

これで二つのIPアドレスが異なっていればOK

python requests

import requests

proxies = {
    "http": "http://localhost:8118",
    "https": "http://localhost:8118",
}
response = requests.get('https://ifconfig.me')
print(response.text)
response = requests.get('https://ifconfig.me', proxies=proxies)
print(response.text)

これで二つのIPアドレスが異なっていればOK

python selenium

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

driver_path = "driverのpath"
service = Service(executable_path=driver_path)
options = webdriver.EdgeOptions()
options.add_argument(f'--proxy-server={proxy_address}')
driver = webdriver.Edge(service=service, options=options)

※自分がEdgeを使用しているのでwebdriver.EdgeOptions()webdriver.Edgeを使用しています。適宜FirefoxやChrome,Ie,Chromium,Safari等で読み替えてください。

上記のコードでEdgeが起動するはずなので、nordvpnのサイトにアクセスをして、ヘッダーが「無防備」ではなく「保護済み」になってればOK
image.png
image.png
※IPはマスクしました。

あるいは https://ifconfig.me を開いてIPアドレスを確認してみて、
普通に開いたブラウザでも開いてIPアドレスに差が出ているならOK

応用

docker run -d \
--cap-add=NET_ADMIN \
--name=vpn1 \
--dns=103.86.96.100 \
--dns=103.86.99.100 \
--restart=always \
-e "USERNAME=<nordvpn_username>" \
-e "PASSWORD=<nordvpn_password>" \
-e "LOCAL_NETWORK=192.168.1.0/24" \
-v /etc/localtime:/etc/localtime:ro \
-v ovpn-data:/app/ovpn/config \
-p 8119:8118 \
jeroenslot/nordvpn-proxy:latest 

で、 http://localhost:8119 に二つ目のproxyを立てる事が出来ます。

同様に3つ目, 4つ目のproxyも作成することができます。

まとめ

jeroenslot/nordvpn-proxy を使用するとnordvpnのproxyコンテナを作成できます

宣伝(招待リンク)

お友達紹介リンク を使用した登録は下記の特典が付くので、もし検討している方はご一考ください。

- 1年または2年プランを選ぶと3か月分の無料期間
- 1か月プランを選ぶと1か月分の無料期間
がもらえます。

書いていて思いましたが、結構紹介特典がしょぼいのでハピタス経由でダウンロードしてポイント貰った方がお得かもしれません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?