作業中のメモ

よく「計算機」を使って作業をする.知らなかったことを中心にまとめるつもり.

SoftEther を利用した VPN サーバの構築

どうも,筆者です.今回は,前回セットアップした Raspberry Pi 3 Model B を利用して,VPN サーバを立てた.何度か試してみた結果,ようやくうまくいったので,ここに記録しておく.

VPN に関しては以下のサイトを参考にした.

qiita.com

システムのアップデート

まずは,おなじみのシステムのアップデートを行う.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

初期設定

システムのアップデートが完了したら,初期設定を行っていく.まずは,swap 領域を無効にするため,以下のコマンドを入力する.

sudo swapoff --all # swap off にする
sudo apt-get remove dphys-swapfile # swap 機能を無効にする.

次に,必要なエディタのインストールとその設定を行う.

sudo apt-get install -y vim # vim をインストール
sudo update-alternatives --config editor # sudo で使用するエディタの設定をする.ここでは vim を選択
sudo vim /etc/vim/vimrc # vim の設定ファイルを修正する
sudo ln -s /etc/vim/vimrc /root/.vimrc # 設定ファイルを root の .vimrc に反映
ln -s /etc/vim/vimrc ~/.vimrc # 同様に自分のローカルにも反映する

vim の設定ファイルに関しては,以前記事にしたので,そちらを参照のこと.

workspacememory.hatenablog.com

最後に,pi ユーザの変更とパスワードなしでの root 切り替えを無効にする設定を行う.これは,以下のサイトを参考にした.

jyn.jp

sudo useradd -M tmp # 一時的なユーザ tmp の作成
sudo gpasswd -a tmp sudo # sudo 権限を付与
sudo passwd tmp # パスワードの設定
exit # 一旦抜ける

### tmp ユーザでログインする ###
sudo usermod -l admin pi # pi ユーザのユーザ名を admin に変更
sudo usermod -d /home/admin -m admin # pi ユーザのホームディレクトリ名を admin に変更
sudo groupmod -n admin pi # pi ユーザのグループを admin に変更
exit # ログアウト

### admin ユーザでログインする ###
sudo userdel tmp # tmp ユーザを削除
sudo passwd admin # admin ユーザのパスワードを変更
sudo rm /etc/sudoers.d/010_pi-nopasswd # パスワードなしで root 権限を取得で気ないようにするため,指定のファイルを削除

これで,自分の中では,初期設定は完了である.早速,本題の VPN 環境を構築していく.

SoftEther を利用した VPN 環境の構築

ここでは,VPN サーバの環境構築を行う.構築手順は,以下のようになる.

  1. bridge アダプタを利用可能にするため,bridge-utils をインストールする.
  2. softether のデータを Web からダウンロードして,インストールする.
  3. vpnserver をサービスへ登録し,自動起動する.
  4. Windows 側で VPN Server の設定を行う.
  5. ネットワーク環境の設定を行う.ここか一番ハマッた部分である.
  6. ルータ側でアドレス変換の設定を行い,外部から VPN サーバにアクセスできるようにする.

この順に処理を進める.

bridge-utils のインストール

vim のインストールと同様に,インストールするだけである.

sudo apt-get install -y bridge-utils

SoftEther のインストール

以下のサイトから,SoftEther をダウンロードしてくる.

SoftEther ダウンロード センター

それぞれ,選択肢を以下のように設定する.

すべて選択すると,ダウンロード可能なファイルの一覧が表示される.今回は,

SoftEther VPN Server (Ver 4.24, Build 9651, beta) softether-vpnserver-v4.24-9651-beta-2017.10.23-linux-arm_eabi-32bit.tar.gz (5.40 MB)

をダウンロードした.wget コマンドを用いて,tar.gz ファイルをダウンロードする.

wget http://jp.softether-download.com/files/softether/v4.24-9651-beta-2017.10.23-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.24-9651-beta-2017.10.23-linux-arm_eabi-32bit.tar.gz

展開し,インストールを行う.

tar zxvf softether-vpnserver-v4.24-9651-beta-2017.10.23-linux-arm_eabi-32bit.tar.gz
pushd vpnserver/
echo -e "1\n1\n1\n" | make
popd
sudo mv vpnserver/ /usr/local/
pushd /usr/local/vpnserver/
sudo chmod 600 *
sudo chmod 700 vpncmd vpnserver
popd

これでインストールは完了である.

サービスへの登録・自動起動の設定

次に,vpnserver をサービスに登録する.好みのエディタで「/etc/systemd/system/vpnserver.service」を新規に開く.そして,以下を記述し,保存する.

sudo vim /etc/systemd/system/vpnserver.service

### 以下を /etc/systemd/system/vpnserver.service に記述し保存する ###
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Type=forking
RestartSec=3s

[Install]
WantedBy=multi-user.target

その後,以下のコマンドでサービスを有効にし,自動起動の設定もする.

sudo systemctl daemon-reload
sudo systemctl enable vpnserver.service
sudo systemctl start vpnserver.service

Windows 側での設定

再び,以下のサイトから Windows 用のマネージャファイルをダウンロードし,インストールする.CPU が AMD の場合はよく分からない. SoftEther ダウンロード センター

それぞれ,選択肢を以下のように設定する.

マネージャを開き,順に設定する.この辺りの設定は,以下のサイトに図付で説明があるので,そちらを参考にする.

www.jifu-labo.net

  1. 新しい接続設定から,接続先を設定する.ここでは,DHCP で割り当てられた IP アドレス 192.168.33.31 を設定した.
  2. 管理者パスワードを設定する.
  3. リモートアクセス VPN サーバーを選択する.
  4. 仮想 HUB 名を決める.ここでは,vpn とした.
  5. DDNS 名を決める.重複しないようにする必要があるため,自分が使いたいものが既に設定されている場合,使えない.
  6. L2TP サーバ機能を有効にする」にチェックを入れる.IPsec 事前共有鍵も設定する.
  7. VPN Azure を有効にする」にチェックを入れる.
  8. ユーザーを作成する.ログイン時に使用する.
  9. ローカルブリッジの設定は,ここでは行わない.(ブリッジ接続する~のまま置いておく)

すべて設定すると,VPN サーバ管理画面が表示される.次に,以下の手順で,tap デバイスの設定を行う.

  1. VPN サーバの管理画面において,左下にある「ローカルブリッジ設定」を選択する.
  2. 「仮想 HUB」として,先ほど決めた「vpn」を選択する.
  3. 「新しい tap デバイスとのブリッジ接続」を選択する.
  4. 新しい tap デバイス名に任意の名前を入力する.ここでは,softether とした.
  5. 「ローカルブリッジを追加」を選択する.

これで,Windows 側の設定は完了である.

ネットワーク環境の設定

一番ハマッたネットワークの設定である.最近の Raspberry Pi では,「/etc/dhcpcd.conf」にネットワークインタフェースの設定を記述するらしいが,ここでは,「/etc/network/interfaces」に記述する. 固定 IP を振りたかったが,どうしてもうまくできなかったため,dhcp として処理した.「/etc/network/interfaces」に以下を記述する.

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto wlan0
iface wlan0 inet static
address 192.168.33.8
netmask 255.255.255.0
gateway 192.168.33.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto br0
iface br0 inet dhcp  ### 固定 IP でも設定可能なはずであるが,うまく動作しなかったため,DHCP とした. ###
# eth0 を tap_softether に割り当てる.この時,softether の部分は,先程の「tap デバイスの設定」で設定した名前にする.
bridge_ports eth0 tap_softether
bridge_maxwait 10

ここで,ちゃっかり,無線 LAN の設定をしている.「/etc/wpa_supplicant/wpa_supplicant.conf」の設定方法は,以下を参照のこと.

workspacememory.hatenablog.com

設定完了後,reboot をかける.問題がなければ,正常に起動するはずである.この時から,eth0 に割り当てられていた IP アドレスではログインできなくなっていた. そのため,予め設定しておいた無線 LAN 側の IP アドレスで,リモートアクセスする.また,マネージャツールも無線 LAN の IP アドレスを設定することで,管理画面に移行できる.

ssh -X admin@192.168.33.8

リモートログイン後,以下のコマンドで eth0 に tap デバイスが割り当てられているか確認する.

brctl show

bridge name     bridge id               STP enabled     interfaces
br0             xyz.abcdefghijk012345       no          eth0
                                                        tap_softether

ルータの設定

最後に,ルータの設定を行う.筆者は,「WHR-1166DHP3」を使用しているので,型番で調べて設定した.忘れそうなので,やり方を示しておく.ここでのソフトウェアのバージョンは,2.9 である. 「詳細設定」の画面に移動し,「セキュリティー」の「ポート変換」に移動する.以下のように IP アドレスとポートの対応付けを登録する.IP アドレスは,無線 LAN 側に割り当てたものを利用する.

以上で,すべての設定は完了である.疲れた.

Raspberry Pi 3 Model B のセットアップ

どうも,筆者です.

今回,Raspberry Pi を新たに購入した.イメージを落としてきて,microSD に焼くまでの作業はササっとできた.しかし,LAN ケーブルも HDMI ケーブルも見つからなかったため,無線 LAN による接続設定ができなかった. ここでは,microSD に設定ファイルを配置するという方法で,無線 LAN の設定を行うことを試みた.

イメージを microSD カードに焼くまで

ここは,苦労せずにできた.以下の環境下で,セットアップを行った.また,使用する OS イメージは,Raspbian Stretch Lite である.

OS: Ubuntu 14.04(仮想環境上)

# Step 1
sudo parted -l # このコマンドの結果により,microSD が /dev/sdb として認識されていることが分かった(/dev/sdb は環境により変わる).
# Step 2
sudo umount /dev/sdb1 # アンマウントする
# Step 3
sudo dd bs=1024K if=2017-09-07-raspbian-stretch-lite.img of=/dev/sdb # これでイメージを microSD に焼くことができる

もしくは,以下のサイトを参考に,「DD for Windows」というツールを用いて microSD にイメージを焼く.

Raspberry Pi 3 Model B をインストールしてSSH接続できるようにしてみる – CLARA ONLINE techblog

無線 LAN の設定

さて,ここからが本題である.といっても,調べたらたくさん出てきたので,ほとんど引用する形となる. 無線 LAN の設定は,「wpa_supplicant.conf」というファイルに保存される.

イメージを焼いた microSD 上にこの設定ファイルを配置しておけば,起動時に勝手に「/etc/wpa_supplicant/wpa_supplicant.conf」に上書きされる仕様になっているらしい. こちらのサイトを参考にして,設定ファイルを作成し,microSD 上に配置した.同時に,「ssh」というファイルも microSD 上に配置した.

qiita.com

ssh によるリモートログイン

最後に,ssh 接続するための IP アドレスを調査する.これだけは,調べてもいい方法が見つからなかったため,Ubuntu 側からネットワーク内のアドレスを調査する shell script を作成した.

#!/bin/bash

networkAddr=192.168.33

seq 1 32 | while read ipAddr; do
    ping -c 1 -w 1 ${networkAddr}.${ipAddr} > /dev/null
    ret=$?

    if [ ${ret} -eq 0 ]; then
        macAddr=$(arp -a ${networkAddr}.${ipAddr} 2> /dev/null)
        echo ${networkAddr}.${ipAddr} ${macAddr^^}
    fi
done

これを「ipAddr.sh」として保存し,実行すると,以下のようになる.

192.168.33.1 BUFFALO.SETUP (192.168.33.1) AT **:**:**:**:**:** [ETHER] ON ETH0
192.168.33.3 ? (192.168.33.3) AT **:**:**:**:**:** [ETHER] ON ETH0
192.168.33.12 ? (192.168.33.12) AT B8:27:EB:**:**:** [ETHER] ON ETH0
192.168.33.31 ? (192.168.33.31) AT B8:27:EB:**:**:** [ETHER] ON ETH0

Raspberry Pi 3 の MAC アドレスは B8:27:EB で始まるものであるので,12 か 31 となる.ここで,12 は以前設定した Raspberry Pi 3 であることが分かっているので,今回の接続先は 31 となる. 以上から,ターミナルを立ち上げて,

ssh pi@192.168.33.31

とコマンドを入力することで,Raspberry Pi に接続できる.

余談

他にも,MAC アドレスから IP アドレスを調べる方法として,以下のサイトが見つかった.ブロードキャストを使う方法は思いつかなかったので今度から使ってみようと思う.

Raspberry PiのIPアドレスをログインせずに調べるやり方 | 株式会社INDETAIL - インディテール