LinuxでSoftetherを使って筑波大学vpnを使おう

目次

ちょっとしたことでVPNを使いたいことがあったりしますがそのときにいちいち有料契約するのはもったいないしだるい。なのでとりあえず試すくらいなら無料のやつを使いたいですよね。ということで筑波大学が実験サービスとして無料でやっているvpnサービスを使ってみます。Linuxだと設定を変えたりと少し面倒だったので記録。

筑波大学のVPNってなんだ

https://www.vpngate.net/ja/

↑これです。見てもらえればわかりますが筑波大学が学術実験サービスということで無料でvpnサーバーを募っているものです。サーバーの持ち主は個人で不安かもしれませんがスコアが上の方の日本のサーバーはそもそもこのサービスを始めた人が管理者だったりするので多分、大丈夫。責任は持てませんけど。

サーバー自体は大学が持っているわけではないってことですね。あくまで募集して利用者をつなげているサービスって感じ。

vpnのclient

vpnを使うときにはvpn接続するソフトが必要になるわけで筑波大のvpnサービスではこんな感じのものがサポートされています。

vpn_client_table

https://www.vpngate.net/ja/howto_windows.aspx より

表を見てもわかるとおりおすすめはSoftEtherでこれは筑波大学vpnサービスと同じようにして開発されているみたいです。オープンソースで当然これも無料です。

Let’s Linux

Windowsではインストールしたらサーバー選ぶだけですぐつながっていいんですがLinuxだとそうはいかなかったのでその部分の記録です。

なお

https://www.gadgets-today.net/?p=7070#VPN_%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%83%85%E5%A0%B1%E3%82%92%E6%BA%96%E5%82%99%E3%81%99%E3%82%8B

↑のサイト様を大変参考にしております。助かりました。ありがとうございました。

ダウンロード

ここからダウンロードします。

コンポーネントは「SoftEther VPN Client」

プラットフォームは「Linux」

CPUは環境によりますが多くの場合「Intel x64/AMD/64(64bit)」でしょう。

バージョン違いで色々出てくると思いますが今回使用したのは記事執筆時点で最新の Ver 4.43 です。

実行&準備

tar.gzファイルがダウンロードされるので解凍して入ります。

cd vpnclient/

そうしたらビルドしていきます。

make

なにか聞かれた気がするけど忘れました。

makeしたら使えるようになっているので

sudo ./vpnclient start

これでVPNクライアントが起動します。このvpnclientは起動、停止するのに使うだけでvpnの設定などは次のコマンドでやっていきます。

sudo ./vpncmd

1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

↑省略しています。今回はclientの設定なので2を入力。そのままEnterでlocalhostにつなぎます。

この時点でlocalhostに繋げない場合は./vpnclientがうまくいっていないことが多いのでそのエラーコードを読みましょう。

HELPでvpncmdの大体の使い方はわかります。しかも日本語なのでかなりわかりやすい。

最初に仮想NIC(ネットワークカード)を作ります。このNICをvpnにつなぎます。

VPN Client>NicCreate
NicCreate コマンド - 新規仮想 LAN カードの作成仮想 LAN カードの名前: vpn_nic1

コマンドは正常に終了しました。

これでNICができました。名前はわかりやすければなんでもいいです。ip aとかnmcli deviceとかでも見れるようになっています。

VPNサーバー設定

vpnサーバーの設定をしていきます。

vpncmdの考え方的にはある設定に対してAccountを一つ作るようにできています。プロファイルみたいな感じです。そのためつなぎたいvpnサーバーが複数ある場合は複数Accountを作ることになります。

VPN Client>AccountCreate
AccountCreate コマンド - 新しい接続設定の作成接続設定の名前: vpn_test

接続先 VPN Server のホスト名とポート番号: 999.888.777.666:111

接続先仮想 HUB 名: VPNGATE 

接続するユーザー名: vpn

使用する仮想 LAN カード名: vpn_nic1

コマンドは正常に終了しました。

上から順に追っていきます。AccountCreateコマンドで最初に名前を聞かれます。設定プロファイル名みたいなものですね。わかりやすいのを自由につけてください。次にホスト名、ポート番号を聞かれます。あくまで上のは例です。↓のサーバーであれば赤線の 219.100.37.161:433 とします。

ex_fig

次に接続先仮想HUB名ですがサイトを見ても特に書いてありませんでした。Windowsの方でつないでから見てみるとVPNGATE(大文字)となっています。おそらくすべてのvpnサーバー(この筑波大のサービスの)の仮想HUB名の設定はVPNGATEでいいみたいです。

次のユーザー名はサイトにある通りvpn(小文字)です。

仮想LANカード名はさっき設定したやつですね。

次にパスワードの設定です。

VPN Client>AccountPasswordSet
AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定接続設定の名前: vpn_test

パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。
パスワード: ***(vpn)
確認入力  : ***(vpn)


standard または radius の指定: standard

コマンドは正常に終了しました。

接続設定の名前をさっきのものを。パスワードはvpnです。standardでいいです。

ここまでは多分大丈夫でしょう。問題はこのあとです。

ルーティング設定

今の状態でvpn接続を開始するコマンドのAccountConnectを実行してもipが先程つくった仮想NICに付与されません。そのためipを手動で設定しなくてはいけませんがルーティングがうまくいかないとそれだけでもだめです。

意味がわからないと思いますがまだ諦めずにとりあえず

ip route

とすると

default via 192.168.1.1 dev eth0 proto static metric 100 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.2.195 metric 100 

↑みたいになっているでしょう。これはルートテーブルという通信の経路を表しているものです。これは有線LANのみつないでいる例なので例えば無線LANの場合はeth0がwlan0になっていたりすると思います。

これの意味はまず2行目から

192.168.2.100(自分自身)から送る通信で192.168.1.0/24に向かう通信はeth0(有線LAN)というデバイスに流しますよ。

です。ここで192.168.1.100はこのパソコン自身のipなので自分が送る通信のことを挿しているわけですね。そして1行目の方は

指定されていない宛先(default)は192.168.1.1にeth0のデバイスで送りますよ。ということです。

まとめると自分からプライベートネットワーク内に送るのはeth0を使います、それ以外の通信全般は192.168.1.1(ゲートウェイ)にeth0で送ります、ということです。

このままだと仮想NICが使えません。仮想NICを使う通信経路が書かれておらずvpnサーバーにもつながっていないからですね。そこでルートテーブルを書き換えます。再起動すればもとの状態に戻るので間違えても大丈夫です。

現時点のルーティング↓

flowchart LR
    default --> |eth0|192.168.1.1
    192.168.1.100 -->|eth0|192.168.1.0/24

vpn通信でのルーティング↓

flowchart LR
    default --> |vpn_nic1|vpnサーバーのゲートウェイ
    192.168.1.1 --> 999.888.777.666
    192.168.1.100 -->|eth0|192.168.1.1

まずvpnサーバー向けの通信がゲートウェイを通るようにします。

sudo ip route add 999.888.777.666 via 192.168.1.1 dev eth0

defaultの行き先が自分のネットワークのゲートウェイになっているのでこれをvpnのゲートウェイに変えるために一旦今の設定を消します。

sudo ip route delete default via 192.168.1.1 dev eth0

ip route するとこうなっているかと思います。

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100 
999.888.777.666 via 192.168.1.1 dev eth0 

ここで./vpncmdでvpn通信を一旦つなぎかけます。

VPN Client> AccountConnect vpn_test

今の状態としてはvpnをつなごうとしているが仮想NICにipが割り振られておらず繋げられない、というものです。

なので

sudo dhclient vpn_nic1

↑で仮想NICにipを付与します。vpnの経路はできているのでvpnサーバーから正しいipをもらえるはずです。ipを与えると自動でルーティングテーブルを更新して次のようになります。

default via 10.243.254.254 dev vpn_vpn_nic 
10.243.0.0/16 dev vpn_vpn_nic proto kernel scope link src 10.243.209.100
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.195 metric 100 
219.100.37.161 via 192.168.2.1 dev eth0 

ここでもらったipは10.243.209.100とします。ゲートウェイ10.243.254.254でこれは勝手に設定してくれます。

ip a で見ると仮想NICにipが割り振られておりここでも自宅と違うことがわかるかと思います。これでvpn接続は完了です。

vpnの停止

vpnを止めるときは

sudo ./vpnclient stop

↑でvpnクライアント自体を止めます。ただしこれだけだとルーティングテーブルが戻っておらず通常のネット接続ができないのでネットワークの再起動をして戻します。

sudo systemctl restart NetworkManager.service

もし何かルーティングテーブルにのこっていたら個別に ip route delete で対処してください。

ルーティング変更のシェルスクリプト

ルーティング設定を毎回やるのは面倒なのでシェルスクリプトにしました。

仮想NICにip付与までやるのでvpncmdでAccountConnect をしてからこのシェルスクリプトを実行してください。ipアドレス、NIC名を適宜変えるのをお忘れなく。

#!/bin/bash

sudo ip route add 999.888.666.777 via 192.168.1.1 dev eth0
sudo ip route delete default via 192.168.1.1 dev eth0
sudo dhclient vpn_vpn_nic1

参考