Ubuntu 16.04 LTSでSoftether VPN Clientを使う
ノートPCで実家から自宅にVPN接続しようと思ったら、ノートPCのOSをUbuntu 14.04 LTSから16.04 LTSにアップグレードした時に、VPN接続用のシェルスクリプトを消してしまっていたことに気付き、VPN接続できるようになるまで手こずったため、手順をメモ。なお、Softethr VPN Serverの設定は事前に済んでいることが前提です。
Softether VPN Clientのインストール
Softether VPNの公式サイトにVPN ClientのLinuxへのインストール手順がないのですが、VPN Serverのインストール手順はあり、serverの箇所を全てclientに書き換えるだけでVPN Clientのインストールができます。
7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト
VPN Clientの設定
上記公式サイトを参考に、クライアント側でvpncmdを起動します。
NicCreateコマンドで仮想LANカードを作成し、AccountCreateコマンド、AccountPasswordSetで接続先を設定。最後にサービスモードのVPN Clientを起動した時に自動でVPN接続を開始するよう*AccountStartupSetコマンドを設定します。詳細は公式サイトのコマンドリファレンス参照。
6.5 VPN Client の管理コマンドリファレンス - SoftEther VPN プロジェクト
なお、仮想LANカードを作成する際に指定した名前は、VPN接続時のUbuntuのインターフェース名に使用されます。例えば仮想LANカードの名前を「tun0」にした場合、Ubuntuのインターフェース名は「vpn_tun0」となります。このインターフェース名は後でIPアドレスを設定する際に使用することになります。
VPN接続の開始
VPN Clientのサービス起動
上記までの手順が完了したら、次のコマンドでVPN Clientサービスを開始します。
/etc/init.d/vpnclient start
ip addrコマンドでvpn_仮想LANカード名のインターフェースが表示されることを確認します。また、このインターフェースにIPアドレスが設定されていないことが分かるため、次の手順でIPアドレスを設定します。
IPアドレス・ルーティングの設定
当初DHCPでIPアドレスを割り当てようとdhclientコマンドを試したのですが、。どうもVPN Clientで作成された仮想のインターフェースにdhclientコマンドでのIPアドレス割当はできないっぽいです。そこで、別のコマンドで固定IPアドレスを割り当てることにします。
IPアドレスの割当と一緒にDNSのアドレスも設定したいのでnmcliコマンドを試したのですが、これも何故かうまく行かないため、ipコマンドで設定することにしました。
以下固定IPアドレスを192.168.1.1、サブネットマスクを255.255.255.0、仮想LANカード名をtun0とした場合の例です。また、VPN接続先のLANに192.168.0.0/16のネットワークがあり、そこへのゲートウェイが192.168.1.254とします。
ip address add 192.168.1.1/24 brd 192.168.1.255 dev vpn_tun0 ip route add 192.168.0.0/16 via 192.168.1.254 dev vpn_tun0
DNSリゾルバの設定
nmcliが使えないため、邪道ですが直接/etc/resolv.confファイルを書き換えることとします。後述しますが、VPN接続を切断した際には必ず/etc/resolv.confを元に戻す必要があります。
以下参照するDNSサーバのアドレスを192.168.0.1とした場合の例です。
sed -i -e "s/127\.0\.1\.1/192.168.0.1/g" /etc/resolv.conf
以上でVPN接続してネットワーク接続するまでの手順は完了です。
VPN接続の切断
VPN Clientサービスの終了
VPN Clientサービスを止めることで、作成されていた仮想のインターフェースは削除されます。
/etc/init.d/vpnclient stop
DNSリゾルバの復元
/etc/resolv.confを元に戻します。なお、後述するNetworkManagerの再起動の際に自動で元に戻るのですが、念の為先に手動で元に戻しておくものです。
sed -i -e "s/192\.168\.0\.1/127.0.1.1/g" /etc/resolv.conf
NetworkManagerの再起動
最後に念の為ネットワークの設定をリセットします。
systemctl restart NetworkManager.service
以上でVPN接続の切断は完了です。
これらの手順をシェルスクリプトにまとめておくと便利です。が、間違えてシェルスクリプトを無くしてしまったときに苦労するので注意ですね。