Ubuntu から SoftEther VPN サーバーに VPN 接続する方法 (コマンド操作のみ)
前書き
この投稿では、Ubuntu から Softether VPN サーバー (以降 VPN サーバー) にコマンド操作のみで VPN 接続する方法について解説します。
Ubuntu には SoftEther VPN クライアント (以降 VPN クライアント) がインストール済みです。この VPN クライアントを使って SSL-VPN で VPN サーバーに VPN 接続する形にします。
僕がどういう時に VPN 接続しているかというと、Ubuntu がインストール済みのノートパソコン (レッツノート CF-LX5) をカフェに持っていった時に、カフェの Wi-Fi を使ってインターネットに接続します。 Wi-Fi でインターネットに接続できれば、その Wi-Fi 接続を使って VPN サーバーに VPN 接続ができるので、そういう使い方をしています。
VPN サーバーは さくらインターネットの VPS 上に構成済みです。
前提条件
- VPN クライアントが使用する仮想 LAN カードの IP アドレスは DHCP サーバーから配布されるものを使用します。
- DHCP サーバーは、VPN サーバーの機能である SecureNAT の仮想 DHCP サーバーが担います。
参考資料 (過去記事)
ラズパイで同様の設定を行ったときに書いた記事を参考にします。
VPN 接続設定に必要な情報を準備する
VPN サーバーに VPN 接続するための設定 (VPN 接続設定) を Ubuntu で行っていくわけですが、以下の情報を準備しましょう。
項目 | 値 | 関連コマンド |
[1] 仮想 LAN カードの名前 | vnic01 | NicCreate |
[2] VPN 接続の名前 | connect-sakura-vps | AccountCreate |
[3] VPN サーバーの IP / FQDN | ab0-123-456789.cd.sakura.ne.jp | AccountCreate |
[4] VPN サーバーの TCP ポート番号 | 5555 | AccountCreate |
[5] VPN サーバーの仮想 HUB 名 | sakura-sslvpn-vhub | AccountCreate |
[6] VPN サーバーに接続するためのユーザー名 | hoge | AccountCreate |
[7] 上記ユーザーのパスワード | vpnuserpasswd | AccountPasswordSet |
[8] Ubuntu のデフォルトゲートウェイ IP アドレス | 192.168.100.1 | ip route |
[9] VPN サーバーの SecureNAT が使用している IP アドレス | 172.28.1.254 | ip route |
[9] は、上記の例では 172.28.1.254 になっていますが、これは僕が VPN サーバーを構築したときにこのように設定したからです。このため、環境により 172.28.1.254 とは違う IP アドレスになっていることが大いにありえます。
[8] のデフォルトゲートウェイの IP アドレスは、カフェにパソコンを持って行って Wi-Fi に接続した際に確認します。ip route コマンドで確認できます。
$ ip route
default via 192.168.100.1 dev wlp2s0 proto dhcp metric 600
169.254.0.0/16 dev wlp2s0 scope link metric 1000
192.168.100.0/24 dev wlp2s0 proto kernel scope link src 192.168.100.94 metric 600
$
上記の例では、192.168.100.1 がデフォルトゲートウェイの IP アドレスになります。注意するべきポイントは、例えばカフェ A の Wi-Fi に接続した時のデフォルトゲートウェイの IP アドレスと、カフェ B の Wi-Fi に接続した時のデフォルトゲートウェイの IP アドレスは違っていて当たり前な点です。
デフォルトゲートウェイの IP アドレスがなぜ必要かと言うと、Ubuntu が VPN サーバーに VPN 接続した際に Ubuntu のルーティング設定を換える必要があり、その時にデフォルトゲートウェイの IP アドレスが必要になるためです。
このルーティング設定に関連して [3] の VPN サーバーの IP / FQDN について説明が必要です。[3] は VPN 接続設定時 (後述) に使用します。VPN 接続設定の際に VPN サーバーの FQDN を使うことができますが、VPN 接続した際の Ubuntu ルーティング設定変更時に VPN サーバーの IP アドレスが必要です。ややこしく感じられる場合は、[3] の設定において FQDN を使わず IP アドレスを使うようにし、FQDN のことを考えないようにすれば大丈夫です。
具体的な VPN 設定に入る前にこれらの情報を用意しないと、かなりの確率でうまく接続できないことになるでしょう。だから、ちゃんと準備をしてから設定作業に移る必要があります。
VPN 接続設定の準備
Ubuntu で端末 (ターミナル) で VPN クライアントを起動する
以下のように行ないます。
$ cd /usr/local/vpnclient $ sudo ./vpnclient start The SoftEther VPN Client service has been started. $ ps -ef | grep vpnclient root 131019 1698 0 14:50 ? 00:00:00 /usr/local/vpnclient/vpnclient execsvc root 131020 131019 1 14:50 ? 00:00:00 /usr/local/vpnclient/vpnclient execsvc nobi 131032 126906 0 14:50 pts/1 00:00:00 grep --color=auto vpnclient $
vpnclient が 2 つ起動していればオーケーです。
vpncmd コマンドを実行する
vpncmd は正式には、「コマンドライン管理ユーティリティソフトウェア」ですがここでは vpncmd コマンドと略して表記します。
$ sudo ./vpncmd vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド) Version 4.39 Build 9772 (Japanese) Compiled 2022/04/26 18:00:50 by buildsan at crosswin Copyright (c) SoftEther VPN Project. All Rights Reserved. vpncmd プログラムを使って以下のことができます。 1. VPN Server または VPN Bridge の管理 2. VPN Client の管理 3. VPN Tools コマンドの使用 (証明書作成や通信速度測定) 1 - 3 を選択: 2 接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。 何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。 接続先のホスト名または IP アドレス: VPN Client "localhost" に接続しました。 VPN Client>
ここまでで準備完了。次からが具体的な設定作業です。
VPN 接続設定
仮想 LAN カードを作る
NicCreate コマンドで仮想 LAN カードを作ります。この仮想 LAN カードが、インターネットを経由して、VPN サーバーの仮想 HUB に接続する形になります。
VPN Client>niccreate NicCreate コマンド - 新規仮想 LAN カードの作成 仮想 LAN カードの名前: vnic01 コマンドは正常に終了しました。 VPN Client>niclist NicList コマンド - 仮想 LAN カード一覧の取得 項目 |値 -----------------+------------------------------------ 仮想 LAN カード名|vnic01 状態 |有効 (使用可能) MAC アドレス |5EDA0E568F13 バージョン |Version 4.39 Build 9772 (Japanese) コマンドは正常に終了しました。 VPN Client>
vnic01 という仮想 LAN カードを作りました。NicList コマンドで仮想 LAN カードを表示させています。
仮想 LAN カードを削除したいときは NicDelete コマンドを使います。
VPN サーバーに接続する設定
AccountCreate コマンドで VPN サーバーに接続する設定を作ります。
- VPN 接続の名前 (任意の文字)
- VPN サーバーの IP もしくは FQDN
- VPN サーバーの TCP ポート番号
- VPN サーバーの仮想 HUB 名
- VPN 接続するユーザーの名前
- 仮想 LAN カード名
が必要です。
VPN Client>accountcreate AccountCreate コマンド - 新しい接続設定の作成 接続設定の名前: connect-sakura-vps 接続先 VPN Server のホスト名とポート番号: ab0-123-456789.cd.sakura.ne.jp:5555 接続先仮想 HUB 名: sakura-sslvpn-vhub 接続するユーザー名: hoge 使用する仮想 LAN カード名: vnic01 コマンドは正常に終了しました。 VPN Client>accountlist AccountList コマンド - 接続設定一覧の取得 項目 |値 -------------------+----------------------------------------------------- 接続設定名 |connect-sakura-vps 状態 |オフライン 接続先 VPN サーバー|ab0-123-456789.cd.sakura.ne.jp:5555 (直接 TCP/IP 接続) 仮想 HUB 名 |sakura-sslvpn-vhub 仮想 LAN カード名 |vnic01 コマンドは正常に終了しました。 VPN Client>
AccountList コマンドで作成した VPN 接続設定を確認しています。
VPN 接続設定を削除する場合は AccountDelete コマンドを使います。
VPN 接続する時のユーザーのパスワードを VPN 接続設定と関連づける
AccountCreate コマンドでは VPN 接続する際のユーザー名は使いましたが、そのユーザーのパスワードは使いませんでした。このパスワードの関連付けを AccountPasswordSet コマンドで行ないます。
VPN Client>accountpasswordset AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定 接続設定の名前: connect-sakura-vps パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。 パスワード: ********** 確認入力 : ********** standard または radius の指定: standard コマンドは正常に終了しました。 VPN Client>accountget AccountGet コマンド - 接続設定の設定の取得 接続設定の名前: connect-sakura-vps 項目 |値 -------------------------------------+----------------------------- 接続設定名 |connect-sakura-vps 接続先 VPN Server のホスト名 |ab0-123-456789.cd.sakura.ne.jp 接続先 VPN Server のポート番号 |5555 接続先 VPN Server の仮想 HUB 名 |sakura-sslvpn-vhub 経由するプロキシサーバーの種類 |直接 TCP/IP 接続 サーバー証明書の検証 |無効 接続に使用するデバイス名 |vnic01 認証の種類 |標準パスワード認証 ユーザー名 |hoge VPN 通信に使用する TCP コネクション数|1 各 TCP コネクションの確立間隔 |1 各 TCP コネクションの寿命 |無制限 半二重モードの使用 |無効 SSL による暗号化 |有効 データ圧縮 |無効 ブリッジ / ルータモードで接続 |無効 モニタリングモードで接続 |無効 ルーティングテーブルを調整しない |無効 QoS 制御機能を使用しない |無効 コマンドは正常に終了しました。 VPN Client>
ここまでの設定を網羅的に確認するために AccountGet コマンドを実行しています。
以上で VPN 接続設定は完了で、あとは VPN 接続するだけなのですが、ここで VPN 接続するためのコマンド AccountConnect を実行してもうまく通信できない状況に陥ります。これは想定されたもので、ここで躓くことが多いに違いないと思っています。
以下で詳しく説明します。
Ubuntu のルーティング設定の変更
このルーティング設定が一番ややこしく感じられるポイントで、うまく行かない場合の多くはココで詰まっているのではないかと思います。この投稿の中で一番重要な箇所になると思われます。他のブログ等でこの点についての説明を見たことがありません。
なぜ通信できない状況に陥るかと言うと、VPN 接続することにあわせて Ubuntu のルーティング設定を変更する必要があるためです。具体的には以下のように設定する必要があります。
- VPN サーバーに対するスタティックルートを設定する
- デフォルトゲートウェイを変更する
現時点で 1 のスタティックルートは存在していません。このため新たに設定することになります。
2 のデフォルトゲートウェイに関しては、カフェの Wi-Fi 接続時に自動設定されたものから変更する必要があります。
これと同時にもう 1 つ留意する必要のあるポイントが
- 仮想 LAN カードの IP 設定
です。
仮想 LAN カードは、vnic01 という名前で作成しましたが、Ubuntu 上では vpn_vnic01 という名前で認識されます。
この vpn_vnic01 は前提条件のところで書いたように DHCP サーバーから配布される IP アドレスを使用します。このため vpn_vnic01 で DHCP クライアントを可動させて DHCP サーバーから IP アドレスをもらえるように設定する必要があります。
これらをひっくるめて以下に具体的コマンドで説明します。
Ubuntu のルーティング設定変更のコマンド
現在のルーティング設定は以下のようになっています。(再掲)
$ ip route
default via 192.168.100.1 dev wlp2s0 proto dhcp metric 600
169.254.0.0/16 dev wlp2s0 scope link metric 1000
192.168.100.0/24 dev wlp2s0 proto kernel scope link src 192.168.100.94 metric 600
$
実行するコマンド (OS、つまり Ubuntu のコマンドになります) は以下です。
[1] VPN サーバーの IP アドレス (111.222.33.44 を例にして説明します。これは説明用の適当なアドレスです) に対するスタティックルートを設定します。このとき、現時点のデフォルトゲートウェイの IP アドレス (192.168.100.1) を使います。
sudo ip route add 111.222.33.44 via 192.168.100.1 dev wlp2s0
[2] 今あるデフォルトゲートウェイを削除します。
sudo ip route delete default via 192.168.100.1 dev wlp2s0
[3] ここで仮想 LAN カード (vpn_vnic01) で DHCP クライアントを有効化します。
sudo dhclient vpn_vnic01
[4] デフォルトゲートウェイを設定します。この時、VPN サーバーの SecureNAT で使用している IP アドレスと仮想 LAN カードの名前 (vpn_vnic01) が必要です。
sudo ip route add default via 172.28.1.254 dev vpn_vnic01
この 4 つのコマンドを準備してから、AccountConnect コマンドで VPN 接続を行ないます。
VPN 接続する
では、ここで AccountConnect コマンドで VPN 接続を行ない、その後 Ubuntu のルーティング設定を手早く変更していきます。
VPN Client>accountconnect AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始 接続設定の名前: connect-sakura-vps コマンドは正常に終了しました。 VPN Client>exit $ sudo ip route add 111.222.33.44 via 192.168.100.1 dev wlp2s0 $ sudo ip route delete default via 192.168.100.1 dev wlp2s0 $ sudo dhclient vpn_vnic01 $ sudo ip route add default via 172.28.1.254 dev vpn_vnic01 $
Ubuntu のルーティングテーブルは以下のように変わります。
$ ip route
default via 172.28.1.254 dev vpn_vnic01
111.222.33.44 via 192.168.100.1 dev wlp2s0
169.254.0.0/16 dev wlp2s0 scope link metric 1000
172.28.1.0/24 dev vpn_vnic01 proto kernel scope link src 172.28.1.1
192.168.100.0/24 dev wlp2s0 proto kernel scope link src 192.168.100.93 metric 600
$
curl ifconfig.me を実行して VPN サーバーの IP アドレス (111.222.33.44) が表示されればオーケーです。VPN 接続を介してインターネットに接続する状態になっています。
$ curl -s ifconfig.me; echo
111.222.33.44
$
仮想 LAN カード (vpn_vnic01) の IP アドレスを確認するには ip address show コマンドを使います。
$ ip address show dev vpn_vnic01
4: vpn_vnic01: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 5e:da:0e:56:8f:13 brd ff:ff:ff:ff:ff:ff
inet 172.28.1.1/24 brd 172.28.1.255 scope global dynamic vpn_vnic01
valid_lft 6953sec preferred_lft 6953sec
inet6 fe80::5cda:eff:fe56:8f13/64 scope link
valid_lft forever preferred_lft forever
$
172.28.1.1 が DHCP サーバー (VPN サーバーの SecureNAT の仮想 DHCP サーバー機能 = 172.28.1.254) から配布された IP アドレスです。
VPN 接続を終了する
VPN 接続を終了させるには AccountDisconnect コマンドを使う。
その後 Ubuntu のルーティング設定をもとに戻せば元通りになるが、これが案外面倒だったりする。面倒な場合は Ubuntu を再起動してルーティング設定を元に戻せば良いだろう。
一応、この VPN 接続を終了する手順を書いておく。
VPN Client>accountlist AccountList コマンド - 接続設定一覧の取得 項目 |値 -------------------+----------------------------------------------------- 接続設定名 |connect-sakura-vps 状態 |接続完了 接続先 VPN サーバー|ab0-123-456789.vs.sakura.ne.jp:5555 (直接 TCP/IP 接続) 仮想 HUB 名 |sakura-sslvpn-vhub 仮想 LAN カード名 |vnic01 コマンドは正常に終了しました。 VPN Client>accountdisconnect AccountDisconnect コマンド - 接続中の接続設定の切断 接続設定の名前: connect-sakura-vps コマンドは正常に終了しました。 VPN Client>exit $
AccountList コマンドで VPN 接続設定の名前を確認してから AccountDisconnect コマンドを使うのが簡単で良い。これで VPN 接続が切断される。
VPN クライアントプロセスを終了させる
以下のようにする。
$ pwd /usr/local/vpnclient $ sudo ./vpnclient stop Stopping the SoftEther VPN Client service ... SoftEther VPN Client service has been stopped. $ ip address 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether a8:13:74:95:10:77 brd ff:ff:ff:ff:ff:ff 3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether f4:96:34:33:38:62 brd ff:ff:ff:ff:ff:ff inet 192.168.100.93/24 brd 192.168.100.255 scope global dynamic noprefixroute wlp2s0 valid_lft 3462sec preferred_lft 3462sec $
VPN クライアントのプロセスを終了させると仮想 LAN カードの設定も消える。それを確認しているのが ip address コマンドで、vpn_vnic01 が表示されなくなったことが確認できる。
Ubuntu のルーティング設定をもとに戻す
スタティックルートとデフォルトゲートウェイの設定を消す。
$ sudo ip route delete default via 172.28.1.254 dev vpn_vnic01 $ sudo ip route delete 111.222.33.44 via 192.168.100.1 dev wlp2s0 $
このままだとデフォルトゲートウェイが存在しないのでインターネット側と通信ができない状態だが、多くの場合カフェの Wi-Fi ルーター (DHCP サーバー) からデフォルトゲートウェイが自動的に再設定されるだろう。
時間がかかるなと思ったら以下のようにデフォルトゲートウェイを手動で追加するか、Ubuntu を再起動することでもとに戻すことができるだろう。
sudo ip route default via 192.168.100.1 dev wlp2s0