Oracle Cloudの無料枠でSoftetherを動かしたときの備忘録です。
無料枠のインスタンスを作る
以下入力内容。無料枠の対象でも見積もりには300円/月くらいに表示されるので無視します。
- 名前:VPN_SV ※適当
- イメージ:Ubuntu 24.04 Minimal
- シェイプ:VM.Standard.E2.1.Micro ※Always Free対象
- 仮想クラウドネットワークは
いい感じに作りましょう - SSHキーの追加:お好み(自分のPCの公開鍵をコピペしましょう)
- 記憶容量はノータッチでOK
できたら「アタッチされたVNIC」から、「IP管理」を開きます。ローカルIPが表示されてる表を操作(編集)して、「プライベートIPアドレスの編集」画面に行きます。
ここではパブリックIPアドレスを入手します。
新規予約済みIPアドレスを取得から新しく取得してください。これをDNS等に登録しておくと独自ドメインでVPNにつながるようになります。
初期設定をやる
ここまで来たらsshでログインします。
ssh [email protected]
次に!絶対に!ubuntuユーザーにパスワードを設定します!!!!!!
sudo passwd ubuntu
なぜかというと、Oracle Cloudのブラウザコンソールからインスタンスを操作するときに絶対に必要になるからです。ここでの再設定を怠ると、例えばport22をufwでdenyした時などに詰みます。(1敗)
必ずこれをやってから、おまじないをやって必要なアプリなどをインストールします。
sudo apt update && sudo apt upgrade #いつもの
sudo apt install -y nano ufw
このサイトから最新版のSoftether VPN Serverを落とします。(URLは随時変えてください)
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.44-9807-rtm/softether-vpnserver-v4.44-9807-rtm-2025.04.16-linux-x64-64bit.tar.gz
tar zxvf softether-vpnserver-v*.tar.gz
展開できたので、依存関係をインストールしてmakeしてインストールします。
sudo apt install -y build-essential libreadline-dev libssl-dev
cd vpnserver
make
cd ../
sudo mv vpnserver /usr/local
cd /usr/local/vpnserver
sudo chmod 600 *
sudo chmod 700 vpnserver vpncmd
sudo nano /etc/systemd/system/vpnserver.service
エディタを開いたら以下の内容をコピペします
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target
Ctrl + Xで退出して、以下のコマンドでサービスを有効化。
sudo systemctl daemon-reexec
sudo systemctl enable vpnserver
sudo systemctl start vpnserver
ここまで作業したら、一旦ファイアウォールの作業に移ります。わざわざufwを導入するのはその方がiptableを使うより幸せになれるらしいからです。
sudo ufw status
#状態確認
#Status: inactive
sudo ufw enable
#有効化
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5555/tcp
sudo ufw allow 992/tcp
sudo ufw allow 1194/tcp
sudo ufw allow 500/udp
sudo ufw allow 4500/udp
この時点で本当に再起動してもssh接続を維持できるか確認しておきましょう。
Windowsの作業環境に事前に用意しておいたSoftether VPN Server Mamagerを開いて、サーバーに接続して初期設定を済ませます。
tapデバイスにipアドレスを割り振る
多くの人の解説や手順だと、SecureNATをオンにしていますが、それだと5Mbpsくらいしか出なくなります。せっかく480Mbpsの帯域があるのですからフルで使えるよう工夫していきましょう。
事前にVPNサーバ管理マネージャの「ローカルブリッジ設定」から仮想HUBを選択して「新しいTAPデバイスとのブリッジ接続」を作成します。名前はvpnとかでokです。
次に作ったtap_{決めた名前}のネットワークアダプタがあるか確認します。
ip a
# <em>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
# link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# inet 127.0.0.1/8 scope host lo
# valid_lft forever preferred_lft forever
# inet6 ::1/128 scope host noprefixroute
# valid_lft forever preferred_lft forever
# 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen # 1000
# link/ether 02:00:17:02:f1:4a brd ff:ff:ff:ff:ff:ff
# altname enp0s3
# inet 10.0.0.10/24 metric 100 brd 10.0.0.255 scope global noprefixroute ens3
# valid_lft forever preferred_lft forever
# inet6 fe80::17ff:fe02:f14a/64 scope link
# valid_lft forever preferred_lft forever
# 3: tap_vpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 #qdisc fq_codel state UNKNOWN group default qlen 1000
# link/ether 5e:04:80:70:14:a1 brd ff:ff:ff:ff:ff:ff
# inet6 fe80::5c04:80ff:fe70:14a1/64 scope link
# valid_lft forever preferred_lft forever</em>
存在してたらtap_{略}を覚えといてください。以降tap_vpnとします。
tap_vpnにipアドレスを割り振ります。
sudo nano /etc/netplan/99-tap-vpn.yaml
以下の内容をコピペします
network:
version: 2
renderer: networkd
ethernets:
tap_vpn:
dhcp4: no # DHCPクライアント機能は無効
addresses: [192.168.30.1/24] # tap_vpnに割り当てるIPアドレス
# 必要に応じてDNSサーバーを設定する場合
# nameservers:
# addresses: [8.8.8.8, 8.8.4.4]
前と同じように保存したら適用します。
sudo netplan try
#異常がなかったら適用できているか確認
ip a show tap_vpn
DHCPサーバー導入
SecureNATの仮想DHCPが使えないので本物を用意します。
sudo apt install dnsmasq -y
sudo nano /etc/dnsmasq.conf
/etc/dnsmasq.conf
を編集します。
# tap_vpn インターフェースでDHCPを有効にする
interface=tap_vpn
listen-address=192.168.30.1 # tap_vpnのIPアドレスを明示的に指定
bind-interfaces # 指定したインターフェースのみにバインド
# DHCPレンジを設定 (例: 192.168.30.100 から 192.168.30.200 まで配る)
dhcp-range=192.168.30.100,192.168.30.200,12h
# ゲートウェイをLinuxのtap_vpnのIPアドレスにする
dhcp-option=option:router,192.168.30.1
# DNSサーバーを設定 (例: Google Public DNS)
dhcp-option=option:dns-server,8.8.8.8,8.8.4.4
# DNS機能を無効にするか、別のポートを使う (ポート53の競合回避)
port=0 # port=0でDNS機能自体を無効に
# DHCPトランザクションの詳細ログを有効にする (デバッグ用)
log-dhcp
完了したらサービスを再読込します。
sudo systemctl restart dnsmasq
次に、DHCPサービスのためにポートを開放します
# VPNクライアントからのDHCPリクエストをtap_vpnで受信 (IPv4)
sudo ufw allow in on tap_vpn to any port 67 proto udp
# Linux (DHCPサーバー) からtap_vpn経由でDHCP応答を送信 (IPv4)
sudo ufw allow out on tap_vpn from any port 67 to any port 68 proto udp
# 適用
sudo ufw reload
以上でDHCPサービスの構築は完了です
IPフォワーディングを有効化
LinuxサーバーがVPNクライアントからのパケットをインターネットに転送できるように、IPフォワーディングを有効にします。
cat /proc/sys/net/ipv4/ip_forward
出力が 1
であれば有効です。0
の場合は無効です。
/etc/sysctl.conf
を編集します。
sudo nano /etc/sysctl.conf
以下の行を見つけて、コメントアウト(#
)を解除するか、追加します。
net.ipv4.ip_forward=1
ファイルを保存後、設定を適用します。
sudo sysctl -p
これでIPフォワーディングの設定は終わりです。
NATを設定
before.rules
を編集
sudo nano /etc/ufw/before.rules
ファイルの先頭付近にある *nat
セクションに、以下のルールを追加します。
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
*nat
:POSTROUTING ACCEPT [0:0]
# VPNクライアントのネットワーク (192.168.30.0/24) をインターネット側 (ens3) にMASQUERADEする
-A POSTROUTING -s 192.168.30.0/24 -o ens3 -j MASQUERADE
COMMIT
# Don't delete these required lines, otherwise ufw will stop working.
-o ens3
のens3
は、ご利用のインターネット側のインターフェース名に置き換えてください。-s 192.168.30.0/24
は、VPNクライアントに割り当てるネットワークセグメントです。
最後に、このことをufwに追加します。
sudo ufw route allow in on tap_vpn out on ens3 from 192.168.30.0/24 to any
suod ufw reload
必要に応じて再起動します。
最後に
これで多分完成します。
コメント