RaspberryPiでVPNサーバを構築する
接続が不安定になるのでWiFiで繋がないこと。
RasPiは有線LANで接続し、/etc/dhcpcd.conf内でIPアドレスをstaticにしておく。
$ tar zxvf softether-vpnserver-[バージョン]-linux-arm_eabi-32bit.tar.gz
$ cd vpnserver $ make
$ nano lang.config
$ cd .. $ sudo bash # chown -R root.root ./vpnserver # chmod 700 vpnserver # cd vpnserver # chmod 600 * # chmod 700 vpncmd vpnserver # chmod 700 chain_certs code lib
# cd .. # sudo cp -a ./vpnserver /usr/local
# nano /etc/systemd/system/vpnserver.service [Unit] Description=Softether VPN Server Service After=network.target network-online.ratget [Service] Type=forking User=root ExecStart=/usr/local/vpnserver/vpnserver start ExecStop=/usr/local/vpnserver/vpnserver stop RestartSec=3s WorkingDirectory=/usr/local/vpnserver/ ExecStartPre=/sbin/ip link set dev eth0 promisc on [Install] WantedBy=multi-user.target
# chmod 755 /etc/systemd/system/vpnserver.service
# systemctl start vpnserver.service
# sudo systemctl status vpnserver.service ● vpnserver.service - Softether VPN Server Service Loaded: loaded (/etc/systemd/system/vpnserver.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-02-29 01:52:32 JST; 8min ago Process: 394 ExecStartPre=/sbin/ip link set dev eth0 promisc on (code=exited, status=0/SUCCESS) Process: 417 ExecStart=/usr/local/vpnserver/vpnserver start (code=exited, status=0/SUCCESS) Main PID: 738 (vpnserver) Tasks: 33 (limit: 4915) Memory: 17.8M CGroup: /system.slice/vpnserver.service tq738 /usr/local/vpnserver/vpnserver execsvc mq739 /usr/local/vpnserver/vpnserver execsvc 2月 29 01:52:31 pi4 systemd[1]: Starting Softether VPN Server Service... 2月 29 01:52:32 pi4 vpnserver[417]: The SoftEther VPN Server service has been started. 2月 29 01:52:32 pi4 vpnserver[417]: Let's get started by accessing to the following URL from your PC: 2月 29 01:52:32 pi4 vpnserver[417]: https://127.0.0.1:5555/ 2月 29 01:52:32 pi4 vpnserver[417]: or 2月 29 01:52:32 pi4 vpnserver[417]: https://127.0.0.1/ 2月 29 01:52:32 pi4 vpnserver[417]: Note: IP address may vary. Specify your server's IP address. 2月 29 01:52:32 pi4 vpnserver[417]: A TLS certificate warning will appear because the server uses self signed certificate by default. That is natural. Continue with ignoring the TLS warning. 2月 29 01:52:32 pi4 systemd[1]: Started Softether VPN Server Service.
# systemctl stop vpnserver.service
# systemctl enable vpnserver.service
# rebboot
外部回線を経由せず、LAN内でポートVLANを構築してVPNサーバで折り返させて測定した。
VPNサーバが「ポートALL」、iPerfサーバが「ポートグループ1」、iPerfクライアントが「ポートグループ2」
OrangePi ONE | 35Mbps | Allwinner H3(ARM Cortex-A7 Quad core 1.2GHz) |
RasPi3B+ | 65Mbps | Broadcom BCM2837B0(Cortex-A53 ARMv8 1.4GHz) |
RasPi4B | 80Mbps | Broadcom BCM2711 (Cortex-A72 ARMv8 1.5GHz) |
Direct | 770Mbps | - |
iperf2 server : Corei5 530/2.93GHz, Centos6
これはLinuxの制約が原因で、外からVPN接続したときに、VPNサーバ機にはアクセスできないという問題を回避するための物。
入ってきたNICから出て行くことはできるが、折り返せないためアクセスできない。
NICを2つにする方法もあるが、ここではお手軽にtapデバイスを作成してブリッジを構成する。
詳細は良く理解できていないが、物理NICのeth0の他に、ブリッジデバイスbr0とタップデバイスtap0ができる。
br0はeth0にブリッジされており、br0に割り当てたIPアドレスがNICそのもののIPアドレスとなる。
tapデバイスのtap_tap0もbr0から接続されている。
ブリッジの接続状態はbrctl showコマンドで参照できる。
sudo apt-get install -y bridge-utils
$ sudo nano /etc/network/interfaces # loopback auto lo iface lo inet loopback # Ethernet port auto eth0 iface eth0 inet manual # Bridge interface auto br0 iface br0 inet static address 192.168.xxx.yyy netmask 255.255.255.0 network 192.168.xxx.0 broadcast 192.168.xxx.255 gateway 192.168.xxx.zzz bridge_ports eth0 #その他 auto wlan0 allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
/etc/dhcpcd.confでIP Addressを固定化していたら、その部分をコメントアウトする
$ sudo rm /etc/systemd/system/vpnserver.service
$ sudo nano /usr/local/vpnserver/vpnserver_start #!/bin/bash /usr/local/vpnserver/vpnserver start # vpnserverを起動後、完全に起動してtapデバイスが作成されるのを待つための5秒 /bin/sleep 5 # tapデバイスをbr0にブリッジ接続する tap=$(/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}') /sbin/brctl addif br0 $tap
$ sudo nano /etc/init.d/vpnserver #!/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 # Description: SoftEther VPN Server ### END INIT INFO DAEMON=/usr/local/vpnserver/vpnserver LOCK=/var/lock/vpnserver vpn_start() { # ${DAEMON} start /usr/local/bin/vpnserver/vpnserver_start } vpn_stop() { ${DAEMON} stop } test -x ${DAEMON} || exit 0 case "$1" in start) vpn_start touch ${LOCK} ;; stop) vpn_stop rm ${LOCK} ;; restart) vpn_stop sleep 3 vpn_start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0
$ sudo chmod 755 /etc/init.d/vpnserver $ sudo systemctl enable vpnserver $ sudo systemctl start vpnserver $ sudo systemctl status vpnserver