今月に入って、Raspberry Pi 5が日本国内にも流通され始めたとのことで、自宅サーバをパワーアップするか少し悩んでいるところです。
とは言え、5V・5Aという電源要求や、発熱を考えると、ファンレスでぬくぬくと動いてくれるRasPi4のままでいいかなとも思っている次第です。
ということで、RasPi4で自宅にSSHサーバとVPNサーバを立てた際の備忘録をつらつらと書いてみました。
1.Raspberry Pi用のmicroSDにOSイメージを焼く
(気休め程度かもしれませんが、耐久性を期待してpSLCモードのmicroSDを使っています。)
Raspberry Pi Imagerを使ってmicroSDにインストールイメージを焼く。
その後、microSDの”/boot”に空のファイルで”ssh”を作成する。
無線LANを使う場合は、”wpa_supplicant”も”/boot”に配置する。
Ethernetのデバイス名を”eth0″との形式にするために、”/boot/cmdline.txt”の最後に以下の行を追加する。
net.ifnames=0
2.Raspberry Pi OSの初期設定
上記で設定したmicroSDを実装したRaspberry Piを起動してから、raspi-configで初期設定する。
SSHの公開鍵を生成と登録をして、SSHの公開鍵暗号方式でログイン出来るようにする。
apt updateなどでパッケージの更新、rpi-updateでファームウェアの更新をしたら初期設定は完了。
3.SSHのポート番号変更(必要に応じて)
標準状態ではSSHはポート番号22となっているので、”/etc/ssh/sshd_config”を編集してポート番号を振り替える。
4.Raspberry PiのIPアドレス固定化
インストール直後のRaspberry Pi OSでは、IPアドレスはDHCP設定となっているので、/etc/dhcpcd.confを以下の例を参考に編集して、IPアドレスを固定化する。(各々の設定値は、各自の環境によること。)
# ローカルのサブネットを”61″にしている理由は言わずもがなです 🙂
interface eth0
static ip_address=192.168.61.100/24
static routers=192.168.61.1
static domain_name_servers=192.168.61.1
5.VPNサーバのインストールファイルの準備
Softether VPNのサイトから、Softether VPN ServerのLinux ARM 64bitをwgetコマンドでダウンロードする。
記事記載時点のRTMバージョンをダウンロードする場合は以下の通り。
wget https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Linux/SoftEther_VPN_Server/64bit_-_ARM_64bit/softether-vpnserver-v4.42-9798-rtm-2023.06.30-linux-arm64-64bit.tar.gz
“/usr/local/vpnserver/”などのディレクトリを作成して、上記のtar.gzファイルを移動させてtarコマンドで解凍する。コマンドは以下の感じ。
tar zxvf softether(中略...)tar.gz
6.Softether VPN ServerのMake
上記で解凍したディレクトリで”make”コマンドを実行する。
コンパイル中にライセンスの同意などが問われるので、表示を確認して選択する。
コンパイルで生成された”vpncmd”と”vpnserver”に実行権限を付与して、その他のファイルの実行権限は削除するため、以下のコマンドを実行する。
chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver
7.vpnserverのサービスの作成
上記のvpnserverをsystemdで自動起動させるために、サービスを作成する。
“/etc/systemd/system/vpnserver.service”というユニット定義ファイルを作成して、以下の内容とする。
[Unit]
Description=Softether VPN Server Service
After=network.target
[Service]
Type=forking
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Restart=on-abort
WorkingDirectory=/usr/local/vpnserver/
[Install]
WantedBy=multi-user.target
8.サービスの有効化と確認
以下のコマンドで作成したvpnserver.serviceに実行権限を付与する。
chmod 755 /etc/systemd/system/vpnserver.service
デーモンをリロードして、サービスを有効化する。
sudo systemctl daemon-reload
sudo systemctl enable vpnserver.service
sudo systemctl start vpnserver.service
再起動後に以下のコマンドでプロセスを確認して、vpnserverが起動していれば成功。
ps aux | grep vpn
9.Softether VPNの設定
個々のネットワーク構成や、タップをどう配置するかによっても対応方法が違うので、詳細は省略。
(と言いつつ、ここがサーバ構築の一番のクライマックスのはずでは。。。)
Windowsマシンに”Softether VPN Server Manager for Windows”を入れてそこからグラフィカルで設定するのが一番簡単。ただ、サーバ上でvpncmdを使って設定しても、対話型のインタフェースとなっているので、Windowsを使うことは必須ではない。
L2TP/IPSecとOpenVPNが使えるようになっていればOK。
余談ですが、現時点で最新のOpenVPNのクライアントアプリではL2モードは有効ではなく、L3モードのみ動作するとのことです。OpenVPNを有効にしても、L2モードで接続しようとするとクライアント側でエラーにとなり「どこがおかしいんや…」と悪戦苦闘しました。
10.DDNSの設定とルータのポートフォーワード設定
必要に応じてDDNSの設定をする。ルータ側でDDNSを設定しても、サーバでddclientを使っても構わない。
ルータ側でポートフォーワードの設定をして、以下のポートでアクセスされた場合に、Raspberry PiのIPアドレス宛に転送されるようにする。
- TCP 22(SSHを22/tcpに設定した場合)
- UDP 500・4500(標準的なL2TP/IPSecの設定に準拠した場合)
- TCP 1194(OpenVPNを1194/tcpに設定した場合)
11.ファイアウォールの設定
ufwをaptコマンドでインストールして設定する。
sudo apt-get install ufw
以下のコマンドでufwで限られたポートのみアクセス可能となるように設定する。
(ローカルのIPアドレスやポート番号は個々の環境によること。)
sudo ufw default deny
sudo ufw allow proto tcp from 192.168.61.0/24 to any port 22
sudo ufw allow proto udp from 192.168.61.0/24 to any port 500
sudo ufw allow proto udp from 192.168.61.0/24 to any port 4500
sudo ufw allow proto udp from 192.168.61.0/24 to any port 1194
sudo ufw allow proto tcp from 192.168.61.0/24 to any port 5555
sudo ufw limit proto tcp from any to any port 22
sudo ufw limit proto udp from any to any port 500
sudo ufw limit proto udp from any to any port 4500
sudo ufw limit proto tcp from any to any port 1194
12.スワップファイルの停止とログファイルのRAMディスク化
microSDの劣化を回避するため、スワップファイルの作成を停止させる。
sudo apt autoremove -y dphys-swapfile
“/etc/fstab”を編集して、tmpディレクトリとlogディレクトリをRAM上に保存するように変更する。
tmpfs /tmp tmpfs defaults,size=256m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
13.NTPサーバの変更
“/etc/systemd/timesyncd.conf”を以下の通り編集して、NTPサーバを日本国内のものに変更する。
NTP=ntp.nict.jp
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
変更したら、timesyncdを再起動。
sudo systemctl restart systemd-timesyncd
13.動作確認
一通りの設定が出来たら、再起動してからSSHでコンソールにログインできる
ことを確認する。アクセス不可の場合は、ローカルコンソールからログインした
後に、dmesgコマンドで起動エラーが出ていないか確認する。