SoftEtherVPNサーバを立てて外からアクセスできるようにする【Lubuntu18.04 on LOOX U】
せっかくLubuntuを入れて常時接続サーバとしたLOOX U
今度はVPNサーバを立てて、外出先から安全に接続できるようにしてみます。
LOOX U無線LAN接続でVPN、ちょっとはまったところもあるので覚書
- 初めに
- VPNを導入しよう
- ポート開放
- クライアントからつないでみる
- まとめ
初めに
VPN(Virtual Private Network)とは
今時VPNと呼んでいるほとんどがInternet VPNと思いますが、企業内のLANとか家庭内LANとか(イントラネット)とを公衆回線(インターネット)を用いて仮想的に専用線のように接続する技術です。(あんまり説明になってない...)
VPNでなにがやりたいの?
一言にVPNといっても色々な接続形態や方法がありますが、やりたいのは外部からおうちのLANにアクセスして、デスクトップPCとかNASとかにアクセスしたいわけです。
イメージこんな感じ
外出先のノートPCやスマホからサーバ(LOOXU)経由で自宅LANにアクセスします。
物理的にはインターネット経由でサーバ(LOOXU)に接続するのですが、あたかも家の中からアクセスするように(VPNサーバをルータとして)アクセスできます。
VPNでなにができるか・何が嬉しいか
VPNでつなげるとこんないいことがあるよ!って事を洗い出してみましょう
VPNの特徴としては、外からつないで家の中のローカルLANと同じような環境で接続できるってのがあります。
これの何が嬉しいかというと
家庭内LAN(private network)につながっている機器にアクセスできる
家の中にいるのと同様に、デスクトップPCやNASに接続できる。
WOLでデスクトップ起動して、VNCで操作したり、NASにマウントしたりすることができます。
garapappa.hatenablog.com
VPNを導入しよう
環境
VPNサーバ LOOX U/C30
LOOX U/C30 OS Lubuntu18.04.5 LTS 32bit版
garapappa.hatenablog.com
内臓無線LAN接続
固定IPを割り振っています。(F660Aの設定)
garapappa.hatenablog.com
ソフトウエア
いくつかVPNソフトはありますが、高機能で性能もよさそげなSoftEtherを導入します。
SoftEther VPN
ja.softether.org
ダウンロード手順とかは後程
インストール
概要
以下の感じでインストールしていきます
・SoftEhterのダウンロード
・SoftEhterインストール
・SoftEther自動起動設定
・VPNサーバの設定(vpncmd)
・仮想HUB(ネットワーク)の設定
SoftEherVPNのダウンロード
以下からダウンロードしてます。
SoftEther ダウンロード センター
LOOX Uは32bitなので
ダウンロードするソフトウェアを選択
SoftEther VPN (Freeware)
コンポーネントを選択
SoftEther VPN Server
プラットフォームを選択
Linux
CPU を選択
Intel x86 (32bit)
と選んで検索されたrtm版の最新ビルドを選びます。
2021/3/11現在での最新版は
SoftEther VPN Server (Ver 4.34, Build 9745, rtm)
softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x86-32bit.tar.gz (6.74 MB)
[Non-SSL (HTTP) Download Link] Try this if the above link fails because your HTTP client doesn't support TLS 1.2.
リリース日: 2020-04-05 <最新ビルド>
バージョン更新履歴 (ChangeLog)
言語: English, Japanese, Simplified Chinese
OS: Linux, CPU: Intel x86 (32bit)
(Linux Kernel 2.4 / 2.6 / 3.x / 4.x)
SoftEhterインストール
参考:
7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト
ルートユーザで実行する
sudo su -
インストールフォルダを/usr/local/vpnserverにするので、/usr/localへ移動
cd /usr/local
パッケージファイルの展開
ダウンロードしたものを/tmpに置いた場合
tar xzvf /tmp/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x86-32bit.tar.gz
makeの実行
cd vpnserver make
そうすると ./.install.shが実行されます。
まずは使用権許諾契約書の表示・同意を聞かれるので1の選択を複数回行うとvpnserverプログラムの生成が行われます。
プログラム生成が行われると自動的にチェックコマンドが実行されるので、チェック結果がすべて〇となって
すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。
と表示されればOKです。
SoftEther自動起動設定
自動起動設定を行います。
ここもルートユーザで行います。
/etc/init.d/vpnserverファイルを作成します。
手順書と違うところ
・statusがないので、ロックファイルがある場合はrunningて表示するような簡易版
・Lutunts18はchkconfigがないためupdate-rc.dをつかうようなヘッダの設定を行う
内容
#!/bin/sh ### BEGIN INIT INFO # Provides: vpnserver # Required-Start: $local_fs $network # Required-Stop: $local_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: SoftEther VPN RTM # Description: Start vpnserver daemon SoftEther VPN Server ### END INIT INFO DAEMON=/usr/local/vpnserver/vpnserver LOCK=/var/lock/subsys/vpnserver test -x $DAEMON || exit 0 case "$1" in start) $DAEMON start touch $LOCK ;; stop) $DAEMON stop rm $LOCK ;; restart) $DAEMON stop sleep 3 $DAEMON start ;; status) if [ -e $LOCK ]; then echo "vpnserver is running." else echo "vpnserver is not running." fi ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 esac exit 0
実行権限付与
chmod 755 /etc/init.d/vpnserver
サービスの登録
update-rc.d vpnserver defaults
自動起動の設定
systemctl enable vpnserver
サービスの起動・終了
systemctl start vpnserver systemctl stop vpnserver
VPNサーバの設定(vpncmd)
SoftEtherのドキュメント
7.4 初期設定 - SoftEther VPN プロジェクト
ではGUI(WIndowsにインストールして利用)前提ですが、コマンドでも行えます。
GUIでの説明とともにコマンドをあるので、基本的にこの順番でコマンドを打って設定していきます。
vpncmdの起動
/usr/local/vpnserver/vpncmd
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド) Version 4.34 Build 9745 (Japanese) Compiled 2020/04/05 23:39:56 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 を選択: 1 接続先の VPN Server または VPN Bridge が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。 'ホスト名:ポート番号' の形式で指定すると、ポート番号も指定できます。 (ポート番号を指定しない場合は 443 が使用されます。) 何も入力せずに Enter を押すと、localhost (このコンピュータ) のポート 443 に接続 します。 接続先のホスト名または IP アドレス: サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。 サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。 接続先の仮想 HUB 名を入力: VPN Server "localhost" (ポート 443) に接続しました。 VPN Server 全体の管理権限があります。
仮想HUBの作成
最初から DEFAULTという仮想HUBができているのでこれを使うのもいいが、あえて別のものを作成
コマンド
大文字小文字はどっちでもいいらしい
以下の順でコマンドを実行。引数も指定できるがコマンドをたたくと対話型でパラメータを聞いてくる
仮想HUBのリスト | HubList |
仮想HUBの削除 | HubDelete |
仮想HUBの作成 | HubCreate |
仮想HUBへ移動 | hub ハブ名 |
DEFAULTハブを確認して削除したのち、新しいHUBを作成する
VPN Server>HubList HubList コマンド - 仮想 HUB の一覧の取得 項目 |値 ----------------+------------------- 仮想 HUB 名 |DEFAULT 状態 |オンライン 種類 |スタンドアロン ユーザー |0 グループ |0 セッション |0 MAC テーブル |0 IP テーブル |0 ログイン回数 |0 最終ログイン日時|2021-03-11 20:31:23 最終通信日時 |2021-03-11 20:31:23 転送バイト数 |0 転送パケット数 |0 コマンドは正常に終了しました。 VPN Server>HubDelete HubDelete コマンド - 仮想 HUB の削除 削除する仮想 HUB の名前: DEFAULT コマンドは正常に終了しました。 VPN Server>HubCreate TEST HubCreate コマンド - 新しい仮想 HUB の作成 パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。 パスワード: ******** 確認入力 : ******** コマンドは正常に終了しました。 VPN Server>HubList HubList コマンド - 仮想 HUB の一覧の取得 項目 |値 ----------------+------------------- 仮想 HUB 名 |TEST 状態 |オンライン 種類 |スタンドアロン ユーザー |0 グループ |0 セッション |0 MAC テーブル |0 IP テーブル |0 ログイン回数 |0 最終ログイン日時|2021-03-12 05:53:26 最終通信日時 |2021-03-12 05:53:26 転送バイト数 |0 転送パケット数 |0 コマンドは正常に終了しました。 VPN Server>hub TEST Hub コマンド - 管理する仮想 HUB の選択 仮想 HUB "TEST" を選択しました。 コマンドは正常に終了しました。
グループ・ユーザの作成
接続するためのグループ・ユーザ/パスワードを作成します。
グループは作成しなくても可能
コマンド
グループ作成 | GroupCreate |
ユーザ作成 | UserCreate |
パスワード設定 | UserPasswordSet |
ユーザ一覧 | UserList |
VPN Server/TEST>UserCreate UserCreate コマンド - ユーザーの作成 ユーザー名: test 参加するグループ名: ユーザーの本名: ユーザーの説明: コマンドは正常に終了しました。 VPN Server/TEST>UserPasswordSet UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワード を設定 ユーザー名: test パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。 パスワード: ******** 確認入力 : ******** コマンドは正常に終了しました。 VPN Server/TEST>UserList UserList コマンド - ユーザー一覧の取得 項目 |値 ----------------+-------------- ユーザー名 |test 本名 | 所属グループ |- 説明 | 認証方法 |パスワード認証 ログイン回数 |0 最終ログイン日時|(なし) 有効期限 |無期限 転送バイト数 |0 転送パケット数 |0 コマンドは正常に終了しました。
L2TP/IPsecの設定を行う
iOS、Android、MacOS X、Windows等で標準でサポートされているL2TP/IPsec VPNプロトコルで接続します。
初期では無効になっているため、設定を行います
IPsecEnable
PN Server/TEST>IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:TEST IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化 IPsec 事前共有鍵の文字列 (9 文字以下を推奨): ******** コマンドは正常に終了しました。
SecureNat有効化、NatEnable、DHCPEnable
LOOXUを仮想ルータにしてVPN接続された端末からDHCP・NATでおうちLANにアクセスできるようにします。
他の方法としてはローカルブリッジ接続とかありますが、無線LANの制限で行えません。
VPNFAQ003. 無線 LAN カードを用いてローカルブリッジを構築する場合の注意事項 - SoftEther VPN プロジェクト
LOOX Uの内臓無線LANも当然ダメでした。
ちなみにSecureNatEnableとして有効化すると上記と同様の理由からか無線LANにつながらなくなります。
ですので、ここからはSSH接続ではなく、LOOXU本体での作業がいいです。
SecureNatEnable、NatEnable、DHCPEnableコマンド
そのままコマンド打つだけ
SecureNatEnable
NatEnable
DHCPEnable
VPN Server/TEST>SecureNatEnable SecureNatEnable コマンド - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の有効化 コマンドは正常に終了しました。 VPN Server/TEST>NatEnable NatEnable コマンド - SecureNAT 機能の仮想 NAT 機能の有効化 コマンドは正常に終了しました。 VPN Server/TEST>DHCPEnable DhcpEnable コマンド - SecureNAT 機能の仮想 DHCP サーバー機能の有効化 コマンドは正常に終了しました。
SecureNATをユーザモードで動かす(無線LANがつながらなくなるのでその対処)
これこれ。
VPNFAQ036. SecureNAT の動作モードにはどのような違いがありますか。 - SoftEther VPN プロジェクト
どうやらSecureNATをユーザモードで動かさないとダメなようなのでRawIPモード・カーネルモードで動かないように制御します。
コマンドが見当たらないのでvpn_server.configを直接書き換え
VPNサーバ停止
sudo systemctl stop vpnserver
vpn_server.config書き換え
sudo vi /usr/local/vpnserver/vpn_server.config
以下2項目をfalse→trueへ変更する
bool DisableIpRawModeSecureNAT true bool DisableKernelModeSecureNAT true
VPNサーバ起動
sudo systemctl start vpnserver
ネットワークが動いていないのでネットワークサービス再起動
sudo systemctl restart network-manager
※Lubuntu18.04はnetwork-managerってサービスになってました
ポート開放
外部からVPNで接続できるようにポート開放(ポートフォワーディング)の設定を行います。
F660Aの場合、
・ポートフォワーディング(アプリケーションリスト)
・ポートフォワーディング
の2通りのポートフォワーディング設定があるみたいなのですが、なぜかアプリケーションリストの方では接続できなかった。
そういうもんなのか(上記2つの違いもよくわからん)なにか設定が必要なのかがわからなかった。。。
という事で、アプリケーション>>ポートフォワーディングの設定で
VPNサーバ(LOOXU)へUDPの500と4500を通すように設定します。
クライアントからつないでみる
おうちLANのグローバルIPアドレスを知る
これね、このために調べたんだから。
garapappa.hatenablog.com
Windows10からの接続
スタート>設定>ネットワークとインターネット>VPN>+VPN接続を追加する
接続名 自分でわかるような任意の名前を(例:自宅VPN)
サーバ名またはアドレス おうちLANのグローバルIPアドレス
VPNの種類 事前共有キーを使ったL2TP/IPsec
事前共有キー IPsecEnableコマンドの時に設定したIPsec 事前共有鍵
サインイン情報の種類 ユーザ名とパスワード
ユーザ名(オプション) HUB上に作ったユーザID。ユーザ名@HUB名指定ができる(HUB名省略時はデフォルトのHUB)
パスワード 上記ユーザのパスワード
Andoroidからの接続
機種・Androidバージョンによって違うとは思いますが、Huawei honor 8での設定
設定>その他>VPN>VPNネットワークの追加
名前 自分でわかるような任意の名前
タイプ L2TP/IPSec PSK
サーバアドレス おうちLANのグローバルIPアドレス
L2TPセキュリティ保護 空白のまま
IPSec ID 空白のまま
IPSec事前共有鍵 IPsecEnableコマンドの時に設定したIPsec 事前共有鍵
詳細設定は不要かな?で保存
あとはユーザ名・パスワードを入力して接続
接続されたかの確認方法
ちゃんと接続されているのかを確認するのは何通りか方法ありますが、代表的なものを
ブラウザアクセスしたら自宅LANのIPからアクセスしてる風になってるか?
【NURO光】グローバルIPアドレスをLINEで通知する仕組みをつくってみた - がらぱっぱ
でも紹介した
IP address information
で表示されるIPアドレスが、おうちLANのグローバルIPアドレスであればOK