LinuxでExpressVPNに接続して外部に接続するときの注意点とチェック方法

VPN

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コマンドが使えるようになります。
expressvpn activateでアクティベートします。
$ expressvpn activate
Enter activation code: [ここにアクティベートコードを貼り付ける]

とアクティベーションコードを聞かれます。

アクティベーションコードをコピペしてはりつけましょう。

$ expressvpn connect

でvpnと接続されます。

めっちゃ簡単ですね。

tracerouteコマンドでgoogle.comまでたどり着くまでに通過した経路のIPアドレスを確認することができます。expressvpn connect する前の自分のIPアドレスが含まれていなければ成功です。ちなみにexpressvpn disconnectで接続を解除できます。

$ traceroute google.com
再起動したときに自動でVPNに接続できるように設定しておきます。
$ expressvpn autoconnect true
簡単にLinuxでもVPNが使えるようになるのでめっちゃおすすめです。

本当に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としてかなり優秀なのでオススメです。

コメント