LightSail/Softetherを使い固定IPアドレスを月3.5ドルで取得する

Amazon Linux



家でラズパイによる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を使いました。

Releases · SoftEtherVPN/SoftEtherVPN_Stable
Cross-platform multi-protocol VPN software. This repository is officially managed by Daiyuu Nobori, the founder of the p...


普通に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://localhosthttps://yasufumi-yokoyama.gq
1125ms564ms
2163ms522ms
3125ms688ms
4138ms380ms
5180ms455ms

だいたい200ms-500ms程度の遅延になっていました。

ひとまずこれで常用してみて問題なければこの構成で使い続けます!

終わりに

いかがでしたか。

固定IPアドレス提供オプションがあるプロバイダーは多くないので、これを使うとプロバイダー選びの悩みが1つ減りますね!

Comments

タイトルとURLをコピーしました