家でラズパイによるNextcloudを立てて運用しています。
◯o-netから固定IPアドレスを月1320円で使っていますが、これを安くできないものかと。
LightSailとSoftetherを使うことで月3.5USDに収めることができました。
さらに固定IPアドレスのオプションがないプロバイダーに変更することもできるので、選択の幅が広がり嬉しい限り。
ネット上にも似たような情報はありますが、自分の備忘録を兼ねて記事化。
システム構成
今まではこのような構成でした。
プロバイダーからもらった固定IPアドレスをルーターに割り当てて、まずリバースプロキシで受けてホスト名に応じて各ラズパイに割り振っています。
まあ割と素直な構成かと。
変更後がこれです。
LightSailには無料で固定IPアドレスを付けられることを利用します。
この構成にすることで、
・プロバイダーの固定IPアドレスオプションが不要になり、1210円節約
という恩恵が受けられます。
実際はLightSailインスタンスを稼働させるために月3.5USDが必要になります。
また、通信量が1TB/月を超えると、従量課金になります。
ただ、最初の3ヶ月はLightSail利用料金が無料なのと、個人利用で月1TBも通信することは少ないと思いますので、良い構成じゃないかなーと我ながら思ったり。
環境構築
VPN Server
まずLightSailインスタンスを作ります。
これは↓の記事でのこの章節あるいはググって出てくる解説記事を読んでいただければ。
自分はCollaboraも動かしたいので5USDインスタンスにしましたが、Softetherのみであれば3.5USDインスタンスでも十分でした。
次にSoftetherのサーバーをダウンロード。
ここでrtmと付いているものであれば何でも良いのかなと思います。
自分はsoftether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gzを使いました。
普通にmakeしてインストール。
sudo yum install gcc wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz tar zxf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz cd vpnserver make cd .. sudo mv vpnserver /opt/ sudo chown -R root:root /opt/vpnserver/
OS起動時にVPN Serverが自動起動するようにservice登録。
sudo vim /etc/systemd/system/vpnserver.service # 以下vpnserver.serviceの内容 [Unit] Description=SoftEther VPN Server Service After=network.target [Service] Type=forking User=root ExecStartPre=/sbin/ip link set dev eth0 promisc on ExecStart=/opt/vpnserver/vpnserver start ExecStop=/opt/vpnserver/vpnserver stop Restart=on-abort WorkingDirectory=/opt/vpnserver/ [Install] WantedBy=multi-user.target # 以上vpnserver.serviceの内容 sudo systemctl daemon-reload sudo systemctl enable vpnserver sudo systemctl start vpnserver
VPN Serverの管理ツール起動。
sudo /opt/vpnserver/vpncmd (略) 1. Management of VPN Server or VPN Bridge 2. Management of VPN Client 3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool) Select 1, 2 or 3: 1 (Enter) (略) Hostname of IP Address of Destination: localhost:5555 (Enter) (略) Specify Virtual Hub Name: (Enter)
仮想ハブ virtual_hub を作成し、ユーザーyasuが接続できるようにします。
とりあえずパスワード認証で。今度証明書認証に変更します。
VPN Server>HubCreate virtual_hub Password: ********* Confirm input: ********* (略) VPN Server>Hub virtual_hub (略) VPN Server/virtual_hub>UserCreate yasu /GROUP:none /REALNAME:none /NOTE:none (略) VPN Server/virtual_hub>UserPasswordSet yasu Password: *********** Confirm input: *********** (略) VPN Server/virtual_hub>IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:virtual_hub IPsecEnable command - Enable or Disable IPsec VPN Server Function Pre Shared Key for IPsec (Recommended: 9 letters at maximum): **********
2022/07/21
こちらの記事で証明書認証への切替を済ませています。
ご興味のある方はどうぞ。
同じようにしてユーザーfumiを作成し、以下の用途で使います。
・yasu: LightSail用
・fumi: Raspberry Pi – yasufumi-yokoyama.gq用
初期状態ではリッスンしているポートが多いので減らします。
また、サーバー管理のパスワードも設定しておきます。
VPN Server>ListenerList -----------+--------- TCP 443 |Listening TCP 992 |Listening TCP 1194 |Listening TCP 5555 |Listening VPN Server>ListenerDelete 443 VPN Server>ListenerDelete 992 VPN Server>ListenerDelete 1194 VPN Server>ServerPasswordSet Password: ********** Confirm input: **********
VPN Client
ビルド、インストールはVPN Serverとほぼ同じ。
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnclient-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz tar zxf softether-vpnclient-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz cd vpnclient make cd .. sudo mv vpnclient /opt/ sudo chown -R root:root /opt/vpnclient/
service登録も。
sudo vim /etc/systemd/system/vpnclient.service # 以下vpnclient.serviceの内容 [Unit] Description=SoftEther VPN Client After=network.target [Service] ExecStart=/opt/vpnclient/vpnclient start ExecStop=/opt/vpnclient/vpnclient stop Type=forking Restart=always [Install] WantedBy=graphical.target # 以上vpnclient.serviceの内容 sudo systemctl daemon-reload sudo systemctl enable vpnclient sudo systemctl start vpnclient
先ほどサーバー側で作成したユーザーyasuで動かすように設定。
・仮想NIC virtual_nic を作成
・仮想接続 virtual_connection を作成し、yasuとvirtual_nicを使うようにする
sudo /opt/vpnclient/vpncmd (略) 1. Management of VPN Server or VPN Bridge 2. Management of VPN Client 3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool) Select 1, 2 or 3: 2 (Enter) (略) Hostname of IP Address of Destination: (Enter) (略) VPN Client>NicCreate virtual_nic (略) VPN Client>AccountCreate virtual_connection /SERVER:aa.bb.cc.dd:5555 /HUB:virtual_hub /USERNAME:yasu /NICNAME:virtual_nic (略) VPN Client>NicEnable virtual_nic (略) VPN Client>AccountPasswordSet virtual_connection /PASSWORD:*********** /TYPE:standard
VPN Serverに接続してみます。
どうやら接続できた模様。
VPN Client>AccountConnect virtual_connection (略) VPN Client>AccountStatusGet Item |Value ------------------------------------------+-------------------------------------------------------- VPN Connection Setting Name |virtual_connection Session Status |Connection Completed (Session Established) (略)
仮想NICにはまだIPアドレスが付いていないので、手動で付けてみます。
他の記事にも書いてありますが、なぜか”vpn_”が接頭辞として付く模様。
sudo ip address add 192.168.100.50/24 dev vpn_virtual_nic ip a show 3: vpn_virtual_nic: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 5e:cd:4d:67:5e:06 brd ff:ff:ff:ff:ff:ff inet 192.168.100.50/24 scope global vpn_virtual_nic valid_lft forever preferred_lft forever inet6 fe80::5ccd:4dff:fe67:5e06/64 scope link valid_lft forever preferred_lft forever
同様にRaspberry Pi側にもユーザーfumiを設定して接続し、192.168.100.100を設定した後、pingできることを確認しました。無事開通できたようです。
ping 192.168.100.100 PING 192.168.100.100 (192.168.100.100) 56(84) bytes of data. 64 bytes from 192.168.100.100: icmp_seq=1 ttl=64 time=63.5 ms 64 bytes from 192.168.100.100: icmp_seq=2 ttl=64 time=53.5 ms 64 bytes from 192.168.100.100: icmp_seq=3 ttl=64 time=68.8 ms 64 bytes from 192.168.100.100: icmp_seq=4 ttl=64 time=61.5 ms ^C --- 192.168.100.100 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 53.550/61.883/68.866/5.509 ms
この後、
①yasufumi-yokoyama.gqの名前解決をLightSailに振り向けるように変更 ②reverse-proxyをLightSail側に移動、転送先のIPアドレス:ポートを変更
を行い、無事動作することを確認できました。
応答速度
レスポンス速度もいまのところ体感で遅くなっておらず、いい感じ。
正確さには欠けるかもしれませんが、一応ベンチマークしてみました。
time curl <ターゲットURL>とし、real値を取ります。
# | http://localhost | https://yasufumi-yokoyama.gq |
1 | 125ms | 564ms |
2 | 163ms | 522ms |
3 | 125ms | 688ms |
4 | 138ms | 380ms |
5 | 180ms | 455ms |
だいたい200ms-500ms程度の遅延になっていました。
ひとまずこれで常用してみて問題なければこの構成で使い続けます!
終わりに
いかがでしたか。
固定IPアドレス提供オプションがあるプロバイダーは多くないので、これを使うとプロバイダー選びの悩みが1つ減りますね!
Comments