SoftEther VPN Serverを使用してVPNサーバーを構築する。
SoftEther VPN Serverで構築したVPNサーバーへは、各OS(Windows、iOS、Android等)標準のVPN接続機能(L2TP)でVPNサーバーへ接続が可能なことから、VPN接続するクライアント側でソフトウェアをインストールする必要がない。このことから、ソフトウェアのインストールが制限されているような企業等でも容易に導入が可能。
※VPN接続先ネットワーク(社内LAN等)でDHCP(IPアドレス自動割当て)が有効になっていること
仮想マシンにSoftEther VPN Serverをセットアップする場合、仮想NICのプロミスキャスモードを有効にする必要がある。
&ref(): File not found: "SoftEther仮想マシンでの注意事項.jpg" at page "VPNサーバー構築(SoftEther VPN Server)";
Hyper-Vの場合
http://www.softether-download.com/ja.aspx?product=softether
[root@localhost ~]# tar zxvf softether-vpnserver-v4.27-9668-beta-2018.05.29-linux-x64-64bit.tar.gz ← SoftEther VPN Server展開 |
[root@localhost ~]# cd vpnserver/ ← SoftEther VPN Server展開先ディレクトリへ移動 |
[root@localhost vpnserver]# make ← 実行可能ファイル生成 |
-------------------------------------------------------------------- SoftEther VPN Server (Ver 4.27, Build 9668, Intel x64 / AMD64) for Linux Install Utility Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved. -------------------------------------------------------------------- Do you want to read the License Agreement for this software ? 1. Yes 2. No Please choose one of above number: 1 ← 1(Yes)応答 ・ ・ ・ ライセンス事項が表示される ・ ・ ・ Did you read and understand the License Agreement ? (If you couldn't read above text, Please read 'ReadMeFirst_License.txt' file with any text editor.) 1. Yes 2. No Please choose one of above number: 1 ← 1(Yes)応答 Did you agree the License Agreement ? 1. Agree 2. Do Not Agree Please choose one of above number: 1 ← 1(Agree)応答 ・ ・ ・ すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。 |
[root@localhost vpnserver]# cd ← ホームディレクトリへ戻る |
[root@localhost ~]# mv vpnserver/ /usr/local/ ← SoftEther VPN Server展開先ディレクトリを所定のディレクトリへ移動 |
[root@localhost ~]# cd /usr/local/vpnserver/ ← SoftEther VPN Serverディレクトリへ移動 |
[root@localhost vpnserver]# chmod 600 * ← root以外アクセスできないようにする |
[root@localhost vpnserver]# chmod 700 vpncmd ← vpncmdに実行権限付加 |
[root@localhost vpnserver]# chmod 700 vpnserver ← vpnserverに実行権限付加 |
[root@localhost vpnserver]# ./vpncmd ← vpncmd実行 |
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド) Version 4.22 Build 9634 (Japanese) Compiled 2016/11/27 15:23:56 by yagi at pc30 Copyright (c) SoftEther VPN Project. All Rights Reserved. vpncmd プログラムを使って以下のことができます。 1. VPN Server または VPN Bridge の管理 2. VPN Client の管理 3. VPN Tools コマンドの使用 (証明書作成や通信速度測定) 1 - 3 を選択: 3 ← 3(VPN Tools コマンドの使用)応答 VPN Tools を起動しました。HELP と入力すると、使用できるコマンド一覧が表示できます。 VPN Tools>check ← check応答 すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。 ← 確認 VPN Tools>exit ← exit応答 |
[root@localhost vpnserver]# cd ← ホームディレクトリへ戻る |
[root@localhost ~]# rm -f softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz ← 削除 |
[root@localhost ~]# vi /etc/systemd/system/vpnserver.service ← SoftEther VPN Server起動スクリプト作成 |
[Unit] Description=SoftEther VPN Server After=network.target network-online.target [Service] Type=forking ExecStart=/usr/local/vpnserver/vpnserver start ExecStop=/usr/local/vpnserver/vpnserver stop [Install] WantedBy=multi-user.target |
[root@localhost ~]# systemctl start vpnserver ← SoftEther VPN Server起動 |
[root@localhost ~]# systemctl enable vpnserver ← SoftEther VPN Server自動起動設定 |
【ルーター】
ルーター側の設定で、UDP500番ポート、UDP4500番ポートへのアクセスをサーバーに転送するようにする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照
【ファイアウォール】
サーバー側のファイアウォール設定で、UDP500番ポート、UDP4500番ポートへのアクセスを許可するようにする。
ポート開放確認ツールで「IP」にサーバー名(例:hoge.com)、「ポート番号」に500または4500と入力、「UDP」を選択して「確認」ボタンを押下し、ポートは開放されていますと表示されることを確認。
【ルーター】
ルーターの設定で、待ち受けポートへのアクセスをサーバーに転送するようにする。
※ルーターの設定方法は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照
【ファイアウォール】
サーバー側のファイアウォール設定で、待ち受けポートへのアクセスを許可するようにする。
ポート開放確認ツールで「IP」にサーバー名(例:hoge.com)、「ポート番号」に待ち受けポート番号を入力、プロトコル(TCPもしくはUDP)を選択して「確認」ボタンを押下し、ポートは開放されていますと表示されることを確認。
[root@localhost ~]# systemctl stop vpnserver ← SoftEther VPN Server停止 |
[root@localhost ~]# vi /usr/local/vpnserver/vpn_server.config ← 設定ファイル編集 |
declare DDnsClient { bool Disabled true ← ダイナミックDNS機能無効化(VPNサーバーへ独自ドメイン名(例:hoge.com)でアクセスする) } declare ListenerList { declare Listener0 { bool DisableDos false bool Enabled false ← ポート443での待ち受けを無効化※Apacheと競合するため uint Port 443 } declare Listener1 { bool DisableDos false bool Enabled false ← ポート992での待ち受けを無効化 uint Port 992 } declare Listener2 { bool DisableDos false bool Enabled false ← ポート1194での待ち受けを無効化 uint Port 1194 } declare Listener3 { bool DisableDos false bool Enabled true uint Port 5555 } } |
[root@localhost ~]# systemctl start vpnserver ← SoftEther VPN Server起動 |
[root@localhost ~]# vi /etc/cron.daily/vpnserver ← SoftEther VPN Serverログローテーションスクリプト作成 |
#!/bin/sh # 30日以前のログを削除 find /usr/local/vpnserver/*_log -name '*.log' -mtime +30 -delete |
[root@localhost ~]# chmod +x /etc/cron.daily/vpnserver ← SoftEther VPN Serverログローテーションスクリプトへ実行権限付加 |
SoftEther VPN Serverの管理を行うWindows端末で初期設定を行う。
SoftEtherダウンロードセンターからSoftEther VPN Server Manager for WindowsをダウンロードしてSoftEther VPN サーバー管理マネージャ(管理ツールのみ)をインストールする。
SoftEther VPN Server Managerインストールにより作成されたデスクトップ上のショートカット(SE-VPN サーバー管理 (ツール))でSoftEther VPN サーバー管理マネージャを起動する。
大量のユーザーをGUIで登録するのは煩雑なため、ユーザー名/パスワードを列挙したリストを用意してユーザーを一括登録する。
[root@localhost ~]# vi UserPasswordSet.txt ← ユーザー登録リスト作成 |
Hub VPN ← 仮想HUB名を指定 UserCreate user2 /GROUP:none /REALNAME:none /NOTE:none ← ユーザーuser2を登録 UserCreate user3 /GROUP:none /REALNAME:none /NOTE:none ← ユーザーuser3を登録 UserPasswordSet user2 /PASSWORD:user2password ← user2のパスワードをuser2passwordで登録 UserPasswordSet user3 /PASSWORD:user3password ← user3のパスワードをuser3passwordで登録 |
[root@localhost ~]# /usr/local/vpnserver/vpncmd /server localhost:5555 /in:UserPasswordSet.txt ← ユーザー登録リスト実行 |
ファイル "UserPasswordSet.txt" に記述されているコマンドを、キーボードからの入力の代わりに使用します。 vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド) Version 4.22 Build 9634 (Japanese) Compiled 2016/11/27 15:23:56 by yagi at pc30 Copyright (c) SoftEther VPN Project. All Rights Reserved. パスワード: ************* ← 管理パスワード応答 VPN Server "localhost" (ポート 5555) に接続しました。 VPN Server 全体の管理権限があります。 VPN Server>Hub VPN Hub コマンド - 管理する仮想 HUB の選択 仮想 HUB "VPN" を選択しました。 コマンドは正常に終了しました。 VPN Server/VPN>UserCreate user2 /GROUP:none /REALNAME:none /NOTE:none UserCreate コマンド - ユーザーの作成 コマンドは正常に終了しました。 VPN Server/VPN>UserCreate user3 /GROUP:none /REALNAME:none /NOTE:none UserCreate コマンド - ユーザーの作成 コマンドは正常に終了しました。 VPN Server/VPN>UserPasswordSet user2 /PASSWORD:user2password UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワードを設定 コマンドは正常に終了しました。 VPN Server/VPN>UserPasswordSet user3 /PASSWORD:user3password UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワードを設定 コマンドは正常に終了しました。 |
スタート⇒コントロールパネル⇒ネットワークと共有センター⇒新しい接続またはネットワークのセットアップ
VPN接続をダブルクリック
「接続」ボタン押下
VPNクライアントからVPNサーバーへアクセスできるようにする。
※本設定を行わないとVPNクライアントからVPNサーバーのサービス(Webサーバー、ファイルサーバー等)にアクセスできない。VPNサーバーはVPN接続サービスのみ提供するのであれば本設定は実施不要。
VPS等に利用できるかと思います
サーバー管理マネージャでローカルブリッジ設定を行う。
NICを仮想HUBとブリッジするのではなく tap デバイスと接続します。
ifconfigコマンドを実行すると、tapデバイスが作成されていることがわかります。
[root@localhost ~]# ifconfig |
tap_eth00 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:122 (122.0 b) TX bytes:0 (0.0 b) |
ですが、これではIPアドレスが不明な為VPNからのアクセスはできません。tap デバイス名(今回だとtap_eth00)を確認しておきます。
VPN Serverが作成するtapデバイスはVPN Server起動時に作成されます。tapデバイスが存在しない場合、デバイス名にはアクセスできません。VPN Server起動後にIPアドレスを設定する必要があります。
Linux系OSにvpnserverをインストールする場合、起動スクリプトを作成するかと思います。そのスクリプトにコマンドを記述しましょう。VPN Server起動後にIPアドレス、サブネット、ブロードキャストを設定しネットワークを再起動するコマンドを記述します。
[root@localhost ~]# nmcli device ← 仮想ネットワークインタフェースtap_eth00作成確認 |
デバイス タイプ 状態 接続 eth0 ethernet 接続済み eth0 lo loopback 管理無し -- tap_eth00 tun 管理無し -- ← 仮想ネットワークインタフェースtap_eth00が作成されている |
[root@localhost ~]# vi /etc/systemd/system/vpnserver.service ← SoftEther VPN Server起動スクリプト修正 |
[Unit] Description=SoftEther VPN Server After=network.target [Service] Type=forking ExecStart=/usr/local/vpnserver/vpnserver start ExecStartPost=/usr/local/vpnserver/add_eth00.sh ← tapネットワークインタフェースにIPアドレスを設定するスクリプトを指定 ExecStop=/usr/local/vpnserver/vpnserver stop [Install] WantedBy=multi-user.target |
[root@localhost ~]# systemctl daemon-reload ← SoftEther VPN Server起動スクリプト修正反映 |
[root@localhost ~]# vi /usr/local/vpnserver/add_eth00.sh ← 仮想ネットワークインタフェースIPアドレス設定スクリプト作成 |
#!/bin/sh sleep 3 /sbin/ifconfig tap_eth00 xxx.xxx.xxx.xxx netmask 255.255.255.0 broadcast xxx.xxx.xxx.255 /etc/init.d/network restart |
[root@localhost ~]# chmod +x /usr/local/vpnserver/add_eth00.sh ← 仮想ネットワークインタフェースブリッジIPアドレス設定スクリプトに実行権限付加 |
[root@localhost ~]# systemctl restart vpnserver ← SoftEther VPN Server再起動 |
[root@localhost ~]# ifconfig ← IPアドレス設定状態確認 |
[root@localhost ~]# nmcli device ← 物理インタフェース名確認 |
デバイス タイプ 状態 接続 eth0 ethernet 接続済み eth0 ← 物理インタフェース名はeth0 lo loopback 管理無し -- |
[root@localhost ~]# nmcli c add type bridge ifname br0 ← ブリッジインタフェースbr0作成 |
接続 'bridge-br0' (f80224fe-72c3-437b-804d-7aa890a54fdf) が正常に追加されました 。 |
[root@localhost ~]# nmcli con modify bridge-br0 bridge.stp no ← ブリッジインタフェースbr0のSTPを無効化 |
[root@localhost ~]# nmcli con modify bridge-br0 ipv4.method manual ipv4.addresses 192.168.1.30/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 8.8.4.4" ← ブリッジインタフェースbr0ネットワーク設定 ※例:IPアドレスを192.168.1.30、ネットマスクを24、ゲートウェイを192.168.1.1、DNSサーバーのアドレスを8.8.8.8、8.8.4.4とする |
[root@localhost ~]# nmcli con add type bridge-slave ifname eth0 master bridge-br0 ← 物理インタフェースeth0をブリッジインタフェースbr0に接続 |
接続 'bridge-slave-eth0' (fdd5747f-222f-44b8-aa10-904b5e400903) が正常に追加されました。 |
[root@localhost ~]# nmcli c del eth0 ← 物理インタフェースeth0削除 |
接続 'eth0' (404ed17e-716a-4f13-bbc0-3c4efe8b1eed) が正常に削除されました。 |
[root@localhost ~]# reboot ← システム再起動 |
[root@localhost ~]# brctl show ← ブリッジ接続状態照会 |
bridge name bridge id STP enabled interfaces br0 8000.525400245b91 no eth0 ← 物理インタフェースeth0とブリッジインタフェースbr0がブリッジ接続されている |
[root@localhost ~]# ip addr show ← IPアドレス照会 |
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1 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: eth0: mtu 1986 qdisc pfifo_fast master br0 state UP qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff 物理インタフェースeth0にはIPアドレスは設定されていない 5: br0: mtu 1986 qdisc noqueue state UP qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.1.30/24 brd 192.168.1.255 scope global br0 ← ブリッジインタフェースbr0にIPアドレスが設定されている valid_lft forever preferred_lft forever inet6 2408:211:1242:7e00:f03a:5943:87f:f4c4/64 scope global noprefixroute dynamic valid_lft 2591837sec preferred_lft 604637sec inet6 fe80::d35c:2093:9420:e597/64 scope link valid_lft forever preferred_lft forever |
[root@localhost ~]# nmcli device ← 仮想ネットワークインタフェースtap_eth00作成確認 |
デバイス タイプ 状態 接続 br0 bridge 接続済み bridge-br0 eth0 ethernet 接続済み eth0 lo loopback 管理無し -- tap_eth00 tun 管理無し -- ← 仮想ネットワークインタフェースtap_vpnが作成されている |
[root@localhost ~]# vi /etc/systemd/system/vpnserver.service ← SoftEther VPN Server起動スクリプト修正 |
[Unit] Description=SoftEther VPN Server After=network.target [Service] Type=forking ExecStart=/usr/local/vpnserver/vpnserver start ExecStartPost=/usr/local/vpnserver/add_tap.sh ← 仮想ネットワークインタフェースブリッジ接続コマンド加 ExecStop=/usr/local/vpnserver/vpnserver stop [Install] WantedBy=multi-user.target |
[root@localhost ~]# systemctl daemon-reload ← SoftEther VPN Server起動スクリプト修正反映 |
[root@localhost ~]# vi /usr/local/vpnserver/add_tap.sh ← 仮想ネットワークインタフェースブリッジ接続スクリプト作成 |
#!/bin/sh sleep 3 tap_dev=`/sbin/ip tuntap | awk -F: '{print $1}'` if [ -n "$tap_dev" ]; then /sbin/brctl addif br0 $tap_dev fi |
[root@localhost ~]# chmod +x /usr/local/vpnserver/add_tap.sh ← 仮想ネットワークインタフェースブリッジ接続スクリプトに実行権限付加 |
[root@localhost ~]# systemctl restart vpnserver ← SoftEther VPN Server再起動 |
[root@localhost ~]# brctl show ← ブリッジ接続状態照会 |
bridge name bridge id STP enabled interfaces br0 8000.00ac222f71cb no eth0 tap_eth00 ← 仮想ネットワークインタフェースtap_eth00とブリッジインタフェースbr0がブリッジ接続されている |
あらかじめ管理者にて作成したVPN接続設定をユーザーに配布して、ユーザーが容易にVPN接続できるようにする。
VPN接続コマンド(例:VPN接続.bat)を以下の内容で作成する。
@echo off rasdial "接続先の名前" 仮想HUB名\ユーザー名 パスワード 例)rasdial "VPN 接続" VPN\user1 xxxxxxxx ※パスワードは*にすると問合せがくる
VPN切断コマンド(例:VPN切断.bat)を以下の内容で作成する。
@echo off rasdial "接続先の名前" /disconnect 例)rasdial "VPN 接続" /disconnect
%USERPROFILE%\AppData\Roaming\Microsoft\Network\Connections\Pbkフォルダ内のrasphone.pbkをテキストエディタで編集する。
IpPrioritizeRemote=0 ← リモートネットワークのデフォルトゲートウェイを使わない PreSharedKey=xxxxxxxx ← IPsec事前共有鍵を指定
をユーザーに配布する。
rasphone.pbkを%USERPROFILE%\AppData\Roaming\Microsoft\Network\Connections\Pbkフォルダに格納
VPN接続.bat、VPN切断.batを適当な場所に格納