2020年4月16日木曜日

raspberry pi : VPNサーバーのインストール

目的:
自宅外から自宅のネットワークにアクセスできるようにする。
 
概要:
VPNサーバーとして Softether をインストールし、VPN接続で 自宅外から SSH接続やネットワークドライブ(samba) へのアクセスを行えるようにする。


手順:
  1. bridge-utils のインストール
    VPN接続でVPNサーバー自身(VPNサーバーをインストールした raspberry pi) にアクセスできるようにする為、仮想ブリッジを経由して物理NICアクセスする必要がある。
    1. bridge-utils をインストールする
      $ sudo apt install bridge-utils
       
    2.  /etc/network/interfaces に設定を追加
      $ sudo vi /etc/network/interfaces
      auto br0
      iface br0 inet manual
      bridge_ports eth0      <--- ブリッジ接続するポートを設定
      bridge_maxwait 10
      
       
    3. dhcpcd.conf でIPアドレスを設定する。
      $ sudo vi /etc/dhcpcd.conf
      denyinterfaces eth0
      
      interface br0
      static ip_address=192.168.1.91/24
      static routers=192.168.1.1
      static domain_name_servers=192.168.1.1 8.8.8.8
      
      ブリッジ(br0) に IPアドレス等を設定する。
      ブリッジ接続するポート(eth0) の 設定は削除(コメントアウト) し、
      denyinterfaces で DHCP によるIPアドレスの割り当てが無いようにする。
      denyinterfaces の 設定は、ポートの設定(他ポートも含む)よりも前に記述する。
        
    4.  リブートする
      $ sudo reboot
      リブートして、ifconfig 等で設定を確認する。
       
     
  2.  SoftEther のインストール
    1. SoftEther ソフトウェアの URL 確認 (WEBブラウザで確認)
      SoftEtherダウンロードセンター
      にアクセスする。
       「コンポーネントを選択」で 「SoftEther VPN Server」 を選択
       「プラットフォームを選択」で 「Linux」を選択
       「CPU を選択」 で 「ARM EABI (32bit)」を選択
       最新版のダウンロードファイルのURL を取得する。
        ( 右クリック して リンクのアドレス(URL)を コピーする )
       
    2. SoftEther ソフトウェアをダウンロードし、解凍する。
      以降は root で作業を行う。
      任意のディレクトリで、
      $ su
      # wget [取得した URL]
      # tar zxvf [ダウンロードしたファイル名]
          --> vpnserver ディレクトリができる。
       
    3. Make を実行
      vpnserver ディレクトリに移動して make を実行する。
      # cd vpnserver
      # make
          --> licence agreement を読み (1を選択)、同意 (1を入力) する。
          ( Ver 4.38 では 入力の要求は無かった。 2021.09/25 )
       
    4. vpnserverディレクトリを /usr/local に移動する。
      # cd ..
      # mv vpnserver /usr/local/
       
    5. パーミッションを変更
      # cd /usr/local/vpnserver
      # chmod 600 *
      # chmod 700 vpncmd
      # chmod 700 vpnserver
       
    6. 自動起動のサービスを作成する
      # vi /etc/systemd/system/vpnserver.service
      [Unit]
      Description=SoftEther VPN Server
      After=network.target network-online.target
      
      [Service]
      User=root
      ExecStart=/usr/local/vpnserver/vpnserver start
      ExecStop=/usr/local/vpnserver/vpnserver stop
      Type=forking
      RestartSec=3s
      WorkingDirectory=/usr/local/vpnserver/
      #ExecStartPost=/bin/sleep 10 ; brctl addif br0 tap_vlan
      
      [Install]
      WantedBy=multi-user.target
      
      コメントアウトした行は、管理マネージャで tap を設定した後、コメントアウトを解除する。
        
    7. サービスを起動する
      # systemctl start vpnserver

      起動確認
      # systemctl status vpnserver.service
       
    8. 自動起動を有効にする
      # systemctl enable vpnserver.service
       
    9. リブートして、サービスを確認する
      # reboot
      $ sudo systemctl status vpnserver.service
       
  3. 管理マネージャーの設定
    1. Windows PC に管理ソフトウェアをインストールする。
      SoftEtherダウンロードセンター
      にアクセスする。
       「コンポーネントを選択」で
         「SoftEther VPN Server Manager for Windows」 を選択
       「プラットフォームを選択」で
         「Windows (.Zip package without installeers)」を選択
      ダウンロードしたファイルを解凍し、vpnsmgr.exe を起動する。
       
    2. SoftEther VPN Server への接続設定
      「新しい接続設定」をクリック
      「接続設定名」 に接続先の 任意の名前を設定
      「ホスト名」 に SoftEther VPN Server をインストールした raspberry pi のIPアドレスを設定
      「ポート番号」に 443 を設定
      「OK」 を押下
       
    3. SoftEtheer VPN Server へ接続
      「接続」をクリック
      管理者のパスワード設定ダイアログが開くので、パスワードを設定。
       
    4. 簡易セットアップ
      SoftRther VPN Server / Bridge 簡易セットアップ ダイアログが開くので以下を設定。
      「リモートアクセス VPN サーバー」にチェックして 「次へ」を押下
      「はい」を押下
      「仮想 HUB 名」を入力し、「OK」を押下。(Default は VPN)
      「ダイナミック DNS ホスト名の変更」に任意の名前を設定し「閉じる」を押下
      「L2TP over IPsec」 にチェックし、上で入力した仮想HUB名を選択。
       事前共有鍵(9文字以内推奨)を決めてOKをクリックする。
      「VPN Azure 無効にする」を選択して「OK」 を押下。
      「VPN 接続を受け入れるためのユーザーの作成」で、「ユーザを作成する」を押下。
      「ユーザー名」に任意の名前 を入力、
      「認証方法」にパスワード認証 を選択、
      「パスワード認証」にパスワード を設定して 「OK」を押下
       確認画面で OK を押下する。
       作成したユーザ名が表示されたら、閉じるを押下する。
      「ローカルブリッジの設定」で、raspberry pi の LAN のポート名 (eth0 等)を選択して 閉じる を押下。
       
    5. ローカルブリッジの設定
      「ローカルブリッジ設定」を押下
       上で設定した仮想HUB を選択して、「ローカルブリッジの削除」を押下
      「新しいローカルブリッジの定義」で
       「仮想HUB名」を入力。(例えば VPN)
       「作成する種類」で 「新しいtapデバイスとのブリッジ接続」を選択
       「新しいtapデバイス名」を設定。(例えば、vlan)
       「ローカルブリッジを追加」を押下。
      「閉じる」を押下
      「暗号化と通信関係の設定」を押下
      「暗号化アルゴリズム名」を「DHE-RSA-AES256-SHA」に変更して「OK」を押下
       
    6. 自動起動のサービスの修正
      $ sudo vi /etc/systemd/system/vpnserver.service 
      自動起動サービスの コメントを外す。
      ローカルブリッジの設定で 「新しいtapデバイス名」を vlan 以外に設定した場合は、”tap_vlan" を "tap_[新しいtapデバイス名]” に変更する。
    7. raspberry pi をリブートする
      管理マネージャを閉じ、raspberry pi をリブートし、tap が ブリッジされている事を確認する。
      $ sudo reboot
      $ brctl show br0
      bridge name    bridge id             STP enabled    interfaces
      br0            8000.5ea8b6f10493     no             eth0
                                                          tap_vlan
      
       
  4. ルータ設定
    ルータのポートマッピングで、500/UDP, 4500/UDP を ラズベリーパイのIPアドレスにマッピングする。
    設定方法は、各ルータのマニュアルを参照。
     
  5. ファイアウォール解放
    ラズベリーパイのファイアウォール設定で、500/UDP, 4500/UDP を通過させるように設定する。
    sudo ufw allow 500/udp
    sudo ufw allow 4500/udp
     
  6. 通信確認
    スマホ等からVPN 接続できることを確認する。
    ・android の場合の例 (4G 等で接続)
    設定 - ネットワークとインターネット - VPN
    で、右上の + をクリックし、VPNプロファイルの編集を行う。
    (機種 や android バージョンによって 異なるかも)
     名前       : 任意の名前
     タイプ     :L2TP/IPSec PSK
     サーバーアドレス:ダイナミック DNS ホスト名 に設定した名前
     IPSec事前共有鍵 :設定した 事前共有鍵
     ユーザ名    :設定した ユーザ名
     パスワード   :設定した パスワード
    等を設定して保存後、接続できる事を確認する。
    (スマホは、4G 等の異なるネットワーク で接続していること。)

    ・Windows10 の場合の例 (テザリング等で接続)
    設定 - ネットワークとインターネット - VPN
    で、 +(VPN接続を追加する) をクリックし、VPN接続を追加する。
     VPNプロバイダー    :Windows(ビルトイン)
     接続名          : 任意の名前
     サーバー名またはアドレス:ダイナミック DNS ホスト名 に設定した名前
     VPNの種類       :事前共有キーを使ったL2TP/Ipsec
     事前共有キー      :設定した 事前共有鍵
     サインイン情報の種類  :ユーザー名とパスワード
     ユーザ名        :設定した ユーザ名
     パスワード       :設定した パスワード
    等を設定し、接続できる事を確認する。
    (Windows は、テザリング等 の異なるネットワーク で接続していること。)
     
  7. LOG の所在
    VPNサーバーインストールディレクトリ下に log ディレクトリがある。
    接続できない場合等、server_log ディレクトリ内の log を確認して原因調査を行う。

    /usr/local/vpnserver/server_log/vpn_********.log

0 件のコメント:

コメントを投稿