VPNサーバを立てるとき、定期的にメンテナンスができるように必ずローカルブリッジを作成し、直接乗り込めるようにすることを考えていた
最終的な目標としては、もちろん遠隔メンテナンスをするためだ
地方の実家のネットワークをある程度遠隔でメンテナンスしたいと考えた時、実家に災害対策用バックアップストレージを設置しようと思った時などが該当するだろう
(普通の人間は必要ないとか言わないの)
以前、自宅用にRaspberry Pi 4B+ 8GBRAMとUbuntu 20.04で構築をしたときは、WindowsのGUI Managerを利用してセットアップしたが、今回はコマンドでセットアップした
また、/etc/network/interface
を今回は直接セットアップしたため、その辺りの情報をまとめる
今のところ、全部を網羅的に記載しているものはなかったので、そのメモとして記す
誰かの役に立つといいなと思う
OS
root@raspberrypi:/usr/local/vpnserver# cat /etc/issue
Raspbian GNU/Linux 10 \n \l
Raspbian側の設定
ソフトウェアのインストール
どのサイトでも説明がある通り、ローカルブリッジの設定をするために、bridge-utils
をインストールする
sudo apt install bridge-utils
ローカルブリッジの作成
Ubuntuではここで、netplan配下を編集するが、Raspbianでは/etc/network/interface
を編集する
ここの情報をどうすればいいんだっけがいまいち掴めなかったので、最終的な状態をまとめる
auto lo br0
iface br0 inet static
address [設定する固定IPアドレスを記載]
netmasck 255.255.255.0 # サブネットマスクは必要に応じて変えてください。
gateway [DHCPサーバをするルータのIPアドレス]
dns-nameserver 8.8.8.8 1.1.1.1 #GoogleのDNSを設定しているだけなのでどちらでも
bridge_ports eth0 # 有線のイーサネットの物理をブリッジ
この後、systemctl
への登録などがあるが、それはSoftEtherをインストールして、起動できる状態になってからとする
SoftEther VPN Serverのダウンロードとセットアップ
ダウンロード
以下の内容で絞り込んで、安定板をダウンロードしてください
https://www.softether-download.com/en.aspx?product=softether
Select Software: SoftWther VPN (Freeware)
Select Component: SoftWther VPN Server
Select Platform: Linux
Select CPU: ARM EABI (32bit)
コンパイル・ビルド・起動テスト
- ダウンロードしたら、Raspbianへ転送しtarコマンドで任意のフォルダに解凍する
- 解凍後、ディレクトリに入ったら
make
コマンドでモジュールを作成する -
usr/local/
にvpnserver
ディレクトリを全て移動させ、root:root
に権限を全て変更 - さらに、
vpnserver
とvpncmd
に755
の権限を付与 - 起動してみる
ざっくり以下のコマンドで実行
cd ~/vpnserver
make
chmod 755 vpnserver vpncmd
cd ..
sudo mv vpmserver /usr/local
cd /usr/local
sudo chown root:root -r vpnserver
cd vpnserver
./vpnserver start
正常に起動できればOK
SoftEther側でのローカルブリッジの設定
必要な情報は、接続するときのユーザが属する仮想HUBの名前と、ローカルブリッジに接続するTAPの名前
なので、以下の設定を行う前に、あらかじめ以下の情報を設定した
- 仮想HUBの作成
- 仮想HUBに所属するUserの作成
- DynamicDnsを有効化
- IPsecを有効化
これで必要な情報は揃ったので、以下の通りコマンドを実行する。
VPN Server>BridgeCreate [仮想HUB名] /TAP:yes
BridgeCreate コマンド - ローカルブリッジ接続の作成
ブリッジ先のデバイス名: [tap_hogehogeのhogehoge部分としてつける名前]
物理的な LAN カードに対してブリッジを行う場合、新しいブリッジ接続を作成した直後の状態では、一部の LAN カードでは仮想ネットワーク内のコンピュータからブリッジ接続に使用している LAN カード自身に対する TCP/IP 通信が正しく行えない場合があります。
(特に、Intel や Broadcom 製 LAN カードなどでこの現象が発生する場合があります。)
その場合は、一度 VPN Server / Bridge が動作しているコンピュータを再起動してください。コンピュータの再起動後に正しく通信することができるようになります。
また、大半の無線 LAN アダプタはプロミスキャスモードでのパケットの送受信に対応していない場合が多いため、ローカルブリッジに使用できない場合があります。このような場合は、無線 LAN アダプタではなく通常の LAN カードの使用を検討してください。
コマンドは正常に終了しました。
作ったら確認をする
VPN Server>BridgeList
BridgeList コマンド - ローカルブリッジ接続の一覧の取得
番号|仮想 HUB 名|ブリッジ先 LAN カードまたは tap デバイス名|状態
----+-----------+------------------------------------------+------
1 |**** |hogehoge |動作中
コマンドは正常に終了しました。
一旦これでSoftEther側のブリッジの設定は完了
SoftEther内の設定は、コマンドを用いてか、Windows GUI Managerを使ってか、好きな方で設定してほしい
コマンドで設定する場合、ローカルブリッジ設定以外は以下のサイトを参考に実施したのでそちらをどうぞ
https://nautilus-code.jp/articles/reinstall-softether-vpn-server-to-raspberry-pi-3b
Systemctlへの登録と自動起動
この辺りも大体説明されている方法でOK
まず、/etc/systemd/system
にvpnserver.service
を作成する
/usr/local/
コンパイルしたSoftEtherVPNを全て入れることを前提とした場合、内容は以下の通り
[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
そしたら、systemctl
コマンドで設定する
sudo chown root:root ./vpnserver.service
sudo chmod 755 ./vpnserver.service
sudo systemctl daemon-reload
sudo systemctl enable vpnserver.service
sudo systemctl start vpnserver.service
これで、systemctlで見れるようになったかなどを確認するため、一旦マシンをRebootする
SSH接続でセットアップしていた場合、IPアドレスの設定ミスっているとアクセスできなくなるので、遠隔でこれを頑張らないこと。。。
割り振った固定IPアドレスとその重複がないこと、そのときのGateway設定を間違えていなければ多分大丈夫
rebootしたら、以下のコマンドを実行して再起動後自動起動できているかを確認する
systemctl status vpnserver.service
以下のような形で起動されて入ればOK
# systemctl status vpnserver
● vpnserver.service - SoftEther VPN Server
Loaded: loaded (/etc/systemd/system/vpnserver.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-05-06 20:46:09 JST; 1h 33min ago
Main PID: 570 (vpnserver)
Tasks: 38 (limit: 2059)
CGroup: /system.slice/vpnserver.service
├─570 /usr/local/vpnserver/vpnserver execsvc
└─571 /usr/local/vpnserver/vpnserver execsvc
ローカルブリッジの接続
brctl
コマンドにより、作成したtap_hogehoge
をあらかじめ作っていたローカルブリッジbr0
に参加させる
-
ip tuntap
を実行するとtap_hogehoge: tap
と、tapのブリッジが作られているか確認する。 - ついでに、
ifconfig -a
でローカルブリッジもtapも作れているか確認する。 - ローカルブリッジの
br0
にtap_hogehoge
を参加させる - 確認する
まず以下の通りになっているか確認
# ip tuntap
tap_hogehoge: tap
そして、ipconfigを実行
tap_hogehoge
が作られていればOK
ifconfig -a
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.40 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 ****::****:****:****:**** prefixlen 64 scopeid 0x20<link>
ether **:**:**:**:**:** txqueuelen 1000 (イーサネット)
RX packets 76042 bytes 15089719 (14.3 MiB)
RX errors 0 dropped 224 overruns 0 frame 0
TX packets 65591 bytes 16561668 (15.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether **:**:**:**:**:** txqueuelen 1000 (イーサネット)
RX packets 105947 bytes 27300443 (26.0 MiB)
RX errors 0 dropped 178 overruns 0 frame 0
TX packets 86315 bytes 20449839 (19.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (ローカルループバック)
RX packets 301 bytes 145218 (141.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 301 bytes 145218 (141.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tap_hogehoge: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 ****::****:****:****:*** prefixlen 64 scopeid 0x20<link>
ether **:**:**:**:**:** txqueuelen 1000 (イーサネット)
RX packets 27315 bytes 4330533 (4.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 49111 bytes 15316110 (14.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether **:**:**:**:**:** txqueuelen 1000 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ローカルブリッジにtap_hogehoge
を参加させ、参加したかの確認をする。
# brctl addif br0 tap_hogehoge
# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.5e5fa1de0b89 no eth0
tap_hogehoge
接続確認
iPhoneやMacから接続することを考えていたため、IPsecで接続する
以下の内容で設定
- タイプ : L2TP
- サーバ : ダイナミックDNS
- アカウント :
UserName@仮想Hub名
- RSA SecurID : OFF
- パスワード : アカウントのUserPassword
- シークレット : IPsecを設定する際に設定したキー
- すべての信号を送信 : とりあえずON
- プロキシ : 必要に応じて設定してください
接続できました
おまけ調査「Ubuntuのnetplanとは?」
netplanとは、The network configuration abstraction rendererである
yaml
で簡単にネットワークの構成を定義したら、/etc/network/interface
に定義する内容などをレンダリングして構成してくれる
yamlで構造を書くのって整理しやすいから、確かにこちらの方がわかりやすかった
ubuntuの18.04以降で採用されており、Raspbianには入っていなかった
もしかしたらインストールして設定できるのかもしれないが、今回はそこは調査していない
おわり