LinuxでExpressVPNを使用する
ExpressVPNを利用すると簡単にVPN経由で外部に接続できます。
実際にCentOS7で接続してみたので、その際の注意点や接続状態のチェック方法を紹介します。
CentOS7にExpressVPNを導入してみる
ExpressVPNならWindows やMacだけでなくiOSやAndroid用のアプリまでExpressVPNが提供してくれています(つまりどのデバイスからも簡単にVPNに接続できます)。
しかもLinux(UbuntuもCentOSもOK)からも簡単に設定できます。
Ubuntu と Fedora と Arch と Raspbian
からOSを選べます。
CentOSならFedoraを選んでおけばOKです。
ダウンロードをクリックすれば、expressvpn-2.1.0-1.x86_64.rpm をダウンロードします。
もしくは、
$ wget https://download.expressvpn.xyz/clients/linux/expressvpn-2.1.0-1.x86_64.rpm
でwgetを使ってurlからダウンロードできます。
ダウンロードした.rpmファイルをyumでインストールします。
rpmパッケージなのでCentOS7でもyumを使ってインストールできます。
$ sudo yum install expressvpn-2.1.0-1.x86_64.rpm
expressvpn activate
でアクティベートします。$ expressvpn activate Enter activation code: [ここにアクティベートコードを貼り付ける]
とアクティベーションコードを聞かれます。
アクティベーションコードをコピペしてはりつけましょう。
$ expressvpn connect
でvpnと接続されます。
めっちゃ簡単ですね。
tracerouteコマンドでgoogle.comまでたどり着くまでに通過した経路のIPアドレスを確認することができます。expressvpn connect
する前の自分のIPアドレスが含まれていなければ成功です。ちなみにexpressvpn disconnect
で接続を解除できます。
$ traceroute google.com
$ expressvpn autoconnect true
本当にVPN経由で通信できているか確認する
traceroute
tracerouteでgoogle.comに接続してみましょう。
google.comにたどり着くまでの経路が表示されます。
本来のIPアドレスではなく1番目が10...*のようなアドレスに
2番目のIPアドレスが本来の自分のIPアドレスでないことを確認してください。
$ traceroute google.com traceroute to google.com (172.217.161.78), 30 hops max, 60 byte packets 1 10.178.0.1 (10.178.0.1) 10.253 ms 10.238 ms 10.224 ms 2 103.132.23.123 (103.132.23.123) 10.738 ms 10.765 ms 10.937 ms ....
netstat -rn
netstat -rn でゲートウェイとインターフェイスを確認します。
Ifaceのtun0がVPNとの接続インターフェイスです。
tun0というのはtunnel(トンネル)の頭文字です。
eno1は最初からあったインターフェイスです。
tun0は10.178.0.54から外部へと通信が出ていっています。
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.178.0.54 128.0.0.0 UG 0 0 0 tun0 0.0.0.0 192.168.115.1 0.0.0.0 UG 0 0 0 eno1 10.178.0.1 10.178.0.54 255.255.255.255 UGH 0 0 0 tun0 10.178.0.54 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 92.118.15.95 192.168.115.1 255.255.255.255 UGH 0 0 0 eno1 128.0.0.0 10.178.0.54 128.0.0.0 UG 0 0 0 tun0 192.168.115.1 0.0.0.0 255.255.255.0 U 0 0 0 eno1
iftop
iftopで実際にtun0がどこと通信しているか確認してみます。
iftopは スーパーユーザーでyumを使ってインストールできます。
$ su $ yum install -y iftop
でインストールできます。
スーパーユーザーで、
$ su $ iftop -n -i tun0
-i オプションでどのインターフェイスの通信を見るか指定します。
12.5Kb 25.0Kb 37.5Kb 50.0Kb 62.5Kb └─────────────┴──────────────┴──────────────┴──────────────┴────────────── 10.178.0.54 => 131.93.103.62 0b 0b 126b <= 0b 0b 198b ────────────────────────────────────────────────────────────────────────── TX: cum: 442B peak: 8rates: 0b 0b 126b RX: 694B 1.35Kb 0b 0b 198b TOTAL: 1.11KB 2.22Kb 0b 0b 325b
131.93.103.62に接続するアプリを動かしているのですが、確かにtun0で 10.178.0.54から131.93.103.62に接続されています。
DNS漏れをおこしていないかをチェック
インターネットで接続する際に、ドメイン名からIPアドレスに変換されます。
ドメイン名からIPアドレスに変換するのがDNS(Domain Name Service)サーバーになります。
Webサイトに接続する際の流れは、
接続したい相手のドメインを入力
↓
DNSサーバーに問い合わせ
↓
相手先のIPアドレスを入手
↓
相手先のIPアドレスに接続
という感じになります。
DNSサーバーへの問い合わせ時にVPN経由でないことを「DNS漏れ」と呼ばれます。
当然、DNSへは接続したいドメインを問い合わせるので、これがVPN経由でないとどこに接続したのかがバレバレになってしまいます。
Linuxの場合、DNS漏れをおこしていることはまずないのですが、一応チェック方法を書いておきます。
https://www.expressvpn.com/jp/dns-leak-test
上のExpressVPNのリンクに接続するとDNS漏れをおこしているか確認できます。
Chromeなどのブラウザで上のアドレスに接続してみましょう。
VPSなどを利用していてGUIが使いづらい場合は
Chrome + Chromedriver + Python + Selenium
でスクリーンショットをとると良いと思います。
CentOSでchromedriverを使って接続先のスクリーンショットを撮る
CentOS7へのChromeのインストール
$ yum info google-chrome-stable .... インストール済みパッケージ 名前 : google-chrome-stable アーキテクチャー : x86_64 バージョン : 75.0.3770.100 リリース : 1 .... $ yum install -y google-chrome-stable
バージョンが75だったのでそれに合うchromedriverをインストールします。
Chromedriverのインストール
$ wget https://chromedriver.storage.googleapis.com/75.0.3770.90/chromedriver_linux64.zip
python3のインストール
$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm $ yum search python36 $ yum install python36u python36u-libs python36u-devel python36u-pip
seleniumのインストール
pip3.6 install --upgrade pip pip3.6 install selenium
Pythonのスクリプト
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('https://www.expressvpn.com/jp/dns-leak-test')
page_width = driver.execute_script('return document.body.scrollWidth')
page_height = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(page_width, page_height)
sleep(1)
driver.save_screenshot('screenshot.png')
driver.quit()
exit()
$ python3.6 screenshot.py
とするとscreenshot.pngというスクリーンショット画像が得られます。
と表示されていればDNS漏れも起こっておらず、どこに接続しているかはわかりません。
DNS漏れを起こしがちなのはVPNとの接続を手動設定で行ったりするときに起こりがちです。ExpressVPNではLinuxでも設定を簡単に自動で行ってくれるため、そういったリスクを抑えてくれます。VPNとしてかなり優秀なのでオススメです。
コメント