Oracle Cloudの無料枠 + Softetherで自分専用タダVPNを作る

この記事は約18分で読めます。

Oracle Cloudの無料枠でSoftetherを動かしたときの備忘録です。

この記事の目標

  • PCやスマホからVPNでサーバーにアクセスする

無料枠のインスタンスを作る

以下入力内容。無料枠の対象でも見積もりには300円/月くらいに表示されるので無視します。

  • 名前:VPN_SV ※適当
  • イメージ:Ubuntu 24.04 Minimal
  • シェイプ:VM.Standard.E2.1.Micro ※Always Free対象
  • 仮想クラウドネットワークはいい感じに作りましょう
  • SSHキーの追加:お好み(自分のPCの公開鍵をコピペしましょう)
  • 記憶容量はノータッチでOK

仮想クラウドネットワークでは以下のポイントに注意

  • セキュリティリストのイングレス/エグレスのところに「すべてのプロトコル」を許可させとく。
  • 0.0.0.0/24を入力するところを忘れない(ゲートウェイ、サブネット)

できたら「アタッチされたVNIC」から、「IP管理」を開きます。ローカルIPが表示されてる表を操作(編集)して、「プライベートIPアドレスの編集」画面に行きます。

ここではパブリックIPアドレスを入手します。

新規予約済みIPアドレスを取得から新しく取得してください。これをDNS等に登録しておくと独自ドメインでVPNにつながるようになります。

初期設定をやる

ここまで来たらsshでログインします。

Bash
ssh [email protected]

次に!絶対に!ubuntuユーザーにパスワードを設定します!!!!!!

Bash
sudo passwd ubuntu

なぜかというと、Oracle Cloudのブラウザコンソールからインスタンスを操作するときに絶対に必要になるからです。ここでの再設定を怠ると、例えばport22をufwでdenyした時などに詰みます。(1敗)

必ずこれをやってから、おまじないをやって必要なアプリなどをインストールします。

Bash
sudo apt update && sudo apt upgrade #いつもの

sudo apt install -y nano ufw
SoftEther ダウンロード センター

このサイトから最新版のSoftether VPN Serverを落とします。(URLは随時変えてください)

Bash
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してインストールします。

Bash
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

エディタを開いたら以下の内容をコピペします

Bash
[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で退出して、以下のコマンドでサービスを有効化。

Bash
sudo systemctl daemon-reexec
sudo systemctl enable vpnserver
sudo systemctl start vpnserver

ここまで作業したら、一旦ファイアウォールの作業に移ります。わざわざufwを導入するのはその方がiptableを使うより幸せになれるらしいからです。

Bash
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を開いて、サーバーに接続して初期設定を済ませます。

初期設定の流れ

  1. 管理者パスワードを設定
    →次へ
  2. 「リモートアクセスVPNサーバー」を選択
    →よろしいかと聞かれるので「はい」
  3. DDNS使う?
    →使わないという選択肢が与えられてないので「閉じる」
  4. L2TP使う?
    →2番目以外のチェックを埋めて事前共有鍵を設定して「OK」
  5. VPN Azure使う?
    →左下の「無効」選択して「次へ」
  6. 「ユーザーを作成する」ボタンでユーザー作成
    →ユーザー名・パスワードを設定して「OK」
  7. 元の画面で「閉じる」

tapデバイスにipアドレスを割り振る

多くの人の解説や手順だと、SecureNATをオンにしていますが、それだと5Mbpsくらいしか出なくなります。せっかく480Mbpsの帯域があるのですからフルで使えるよう工夫していきましょう。

事前にVPNサーバ管理マネージャの「ローカルブリッジ設定」から仮想HUBを選択して「新しいTAPデバイスとのブリッジ接続」を作成します。名前はvpnとかでokです。

次に作ったtap_{決めた名前}のネットワークアダプタがあるか確認します。

Bash
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アドレスを割り振ります。

Bash
sudo nano /etc/netplan/99-tap-vpn.yaml

以下の内容をコピペします

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]

前と同じように保存したら適用します。

Bash
sudo netplan try

#異常がなかったら適用できているか確認
ip a show tap_vpn

DHCPサーバー導入

SecureNATの仮想DHCPが使えないので本物を用意します。

Bash
sudo apt install dnsmasq -y
sudo nano /etc/dnsmasq.conf

/etc/dnsmasq.conf を編集します。

TOML
# 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

完了したらサービスを再読込します。

Bash
sudo systemctl restart dnsmasq

次に、DHCPサービスのためにポートを開放します

Bash
# 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フォワーディングを有効にします。

Bash
cat /proc/sys/net/ipv4/ip_forward

出力が 1 であれば有効です。0 の場合は無効です。

/etc/sysctl.conf を編集します。

Bash
sudo nano /etc/sysctl.conf

以下の行を見つけて、コメントアウト(#)を解除するか、追加します。

Bash
net.ipv4.ip_forward=1

ファイルを保存後、設定を適用します。

Bash
sudo sysctl -p

これでIPフォワーディングの設定は終わりです。

NATを設定

before.rules を編集

Bash
sudo nano /etc/ufw/before.rules

ファイルの先頭付近にある *nat セクションに、以下のルールを追加します。

TOML
#
# 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 ens3ens3 は、ご利用のインターネット側のインターフェース名に置き換えてください。
  • -s 192.168.30.0/24 は、VPNクライアントに割り当てるネットワークセグメントです。

最後に、このことをufwに追加します。

Bash
sudo ufw route allow in on tap_vpn out on ens3 from 192.168.30.0/24 to any

suod ufw reload

必要に応じて再起動します。

最後に

これで多分完成します。

コメント

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