※本記事にはアフィリエイトリンクが含まれています。筆者が実際にRackNerdのVPSを契約し、WireGuardを構築・接続確認した内容をもとに紹介しています。
RackNerdのKVM VPSで自分専用WireGuard VPNを構築してみた【Mac実測】
海外VPSを1台借りて、自分専用のWireGuard VPNを作ってみました。今回はRackNerdの1GB KVM VPSへUbuntu 24.04を入れ、 SSHの鍵認証化、rootログインとパスワード認証の無効化、UFW、WireGuard、Mac側クライアント設定まで実施しています。 最後にVPNのON/OFFで外部IPv4が切り替わることと、WireGuardのハンドシェイクも実機で確認しました。
先に重要な点:これは「完全匿名になるVPN」の作り方ではありません。自宅やモバイル回線からRackNerd VPSまで暗号化トンネルを張り、インターネットから見えるIPv4の出口をVPSへ変える構成です。VPS事業者側には契約情報や接続記録が存在し得ます。
今回使ったRackNerd VPS
2026年9月14日時点で、私が契約したのは「1 GB KVM VPS Special」です。注文時の表示は年額 $21.99 USD でした。 日本円での請求額は決済時の為替レートやカード会社の海外事務手数料などで変わるため、この記事では米ドル価格を基準にしています。 料金・在庫・提供ロケーションは将来変更される可能性があります。
| CPU | 1 vCPU |
|---|---|
| RAM | 1 GB |
| ストレージ | 20 GB SSD |
| 月間転送量 | 3000 GB |
| ネットワーク | 1 Gbps Public Network Port |
| IPv4 | 専用IPv4 1個 |
| 仮想化 | KVM |
| 管理権限 | root |
RackNerdを確認する
以下はアフィリエイトリンクです。リンク経由で申込みが行われた場合、当サイトに報酬が入ることがあります。購入者側の価格が必ず安くなるという意味ではありません。
なぜ自作VPNにしたのか
一般的なVPNサービスはアプリを入れるだけで複数国へ接続できるため便利です。一方、自作VPNはサーバーの更新やセキュリティ設定も自分で管理する必要があります。 それでも今回は、VPSとWireGuardの仕組みを理解しながら、自分専用の固定されたVPN出口を作ってみたかったため自作しました。
- 自分専用のVPSをVPN出口として使える
- WireGuardやLinuxの設定を自分で確認できる
- Webサーバー等とは分けて、VPN用途だけの小さなサーバーを持てる
- 一方で、障害対応・アップデート・鍵管理は自分の責任になる
1. VPSを起動してControl Panelを確認
注文後、RackNerdからVPSのIPアドレス、root情報、NerdVM(SolusVM)Control Panelの情報が届きました。 Control Panelでは、Ubuntu 24.04 64 Bit、Disk 20 GB、Memory 1 GBなどを確認できます。
2. MacからSSH接続してUbuntuを更新
最初はRackNerdから発行されたroot情報でSSH接続します。
ssh root@YOUR_VPS_IP
接続後、OSとリソースを確認しました。
whoami
hostname
cat /etc/os-release
ip addr
free -h
df -h
契約直後の実測では、RAMは約961MiB、Swap 1GiB、ルートディスクは約19GiBとして認識されていました。表記単位や予約領域の違いによるもので、1GB / 20GBプランとして不自然な値ではありません。
続いて更新します。
apt update
apt upgrade -y
更新中にkeyboard-configurationが表示されたため、今回は標準的な English (US) を選択しました。
OpenSSHの設定ファイルについて「ローカル変更済み」と聞かれた場面では、既存のSSH接続条件を壊さないよう keep the local version currently installed を選択しました。
カーネル更新後は再起動し、状態を確認しました。
reboot
# 再接続後
uname -r
systemctl --failed
apt list --upgradable
今回の結果はUbuntu 24.04.5 LTS、Kernel 6.8.0-139-generic、failed unit 0、更新残りなしでした。
3. 一般管理ユーザーを作ってSSH鍵認証へ切り替える
rootパスワードで直接入り続けるのではなく、管理用ユーザー vpnadmin を作りました。
adduser vpnadmin
usermod -aG sudo vpnadmin
id vpnadmin
Mac側ではEd25519のSSH鍵を作成します。
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/racknerd_wireguard \
-C "racknerd-wireguard"
秘密鍵 ~/.ssh/racknerd_wireguard は公開しません。記事やスクリーンショットにも載せないようにします。
公開鍵だけをVPSへ送ります。
scp ~/.ssh/racknerd_wireguard.pub \
root@YOUR_VPS_IP:/tmp/racknerd_wireguard.pub
VPS側で authorized_keys に登録します。
install -d -m 700 -o vpnadmin -g vpnadmin /home/vpnadmin/.ssh
cat /tmp/racknerd_wireguard.pub > /home/vpnadmin/.ssh/authorized_keys
chown vpnadmin:vpnadmin /home/vpnadmin/.ssh/authorized_keys
chmod 600 /home/vpnadmin/.ssh/authorized_keys
rm /tmp/racknerd_wireguard.pub
Macから鍵で入れることと、sudoできることを確認します。
ssh -i ~/.ssh/racknerd_wireguard vpnadmin@YOUR_VPS_IP
whoami
sudo whoami
私の環境では whoami → vpnadmin、sudo whoami → root になりました。
4. rootのSSHログインとパスワード認証を無効化
既存設定を確認したところ、初期状態ではrootログインとパスワード認証が有効でした。
sudo sshd -T | grep -E \
'permitrootlogin|passwordauthentication|pubkeyauthentication|kbdinteractiveauthentication'
このVPSでは /etc/ssh/sshd_config.d/50-cloud-init.conf に PasswordAuthentication yes がありました。OpenSSHは設定の読み込み順が重要なので、先に読ませるファイルを作ります。
sudo nano /etc/ssh/sshd_config.d/00-racknerd-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
構文を確認してからreloadします。
sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -E \
'permitrootlogin|passwordauthentication|pubkeyauthentication|kbdinteractiveauthentication'
最終的には次の状態になりました。
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no
ポイント
今使っているSSH接続を閉じる前に、必ず別ターミナルから鍵認証で再ログインできることを確認します。設定ミスで自分を締め出す事故を避けるためです。
パスワードのみでは入れないことも実際に確認しました。
ssh -o PubkeyAuthentication=no \
-o PreferredAuthentications=password \
vpnadmin@YOUR_VPS_IP
結果は Permission denied (publickey). でした。
なお、設定中のSSHログには、外部IPからrootへパスワード認証を試した失敗ログもすでに出ていました。 公開VPSは自動スキャンの対象になりやすいため、「後でセキュリティ設定しよう」ではなく、最初の作業としてSSHを固める方が安心です。
5. UFWでSSHとWireGuardだけを許可
SSH 22/tcpとWireGuard 51820/udpを先に許可してからUFWを有効化しました。
sudo ufw allow 22/tcp
sudo ufw allow 51820/udp
sudo ufw show added
sudo ufw enable
sudo ufw status verbose
有効化後も、別ターミナルからSSH鍵で再接続できることを確認します。
6. WireGuardをインストールしてIPv4転送を有効化
sudo apt update
sudo apt install -y wireguard
wg --version
VPNクライアントの通信をVPSからインターネットへ転送するため、IPv4 forwardingを有効にします。
sudo nano /etc/sysctl.d/99-wireguard-forward.conf
net.ipv4.ip_forward=1
sudo sysctl --system
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1 になればOKです。
UFWではwg0からeth0へ転送する通信を許可します。
sudo ufw route allow in on wg0 out on eth0
7. WireGuardサーバー鍵とwg0を作る
秘密鍵は画面へ表示しないように作ります。
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server_private.key'
sudo sh -c 'wg pubkey < /etc/wireguard/server_private.key > /etc/wireguard/server_public.key'
wg0.conf はVPS内部用アドレスを 10.66.66.1/24、待受ポートを 51820 としました。NATはeth0へMASQUERADEします。
sudo bash -c 'umask 077
{
echo "[Interface]"
echo "Address = 10.66.66.1/24"
echo "ListenPort = 51820"
printf "PrivateKey = "
cat /etc/wireguard/server_private.key
echo "PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE"
echo "PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE"
} > /etc/wireguard/wg0.conf'
sudo chmod 600 /etc/wireguard/wg0.conf
起動・自動起動を設定します。
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show
ip addr show wg0
sudo iptables -t nat -L POSTROUTING -n -v
私の環境では active (exited)、wg0 = 10.66.66.1/24、UDP 51820待受、eth0へのMASQUERADEを確認できました。
8. Mac側のWireGuard鍵と設定を作る
クライアント秘密鍵はMacの外へ出さず、Mac上で生成します。
mkdir -p ~/.wireguard
chmod 700 ~/.wireguard
umask 077
wg genkey | tee ~/.wireguard/mac_private.key | \
wg pubkey > ~/.wireguard/mac_public.key
VPSの /etc/wireguard/wg0.conf にMacの公開鍵をPeerとして追加します。
[Peer]
# MacBook
PublicKey = MAC_PUBLIC_KEY
AllowedIPs = 10.66.66.2/32
設定反映には、SSHを切らずに次を使いました。
sudo wg-quick strip wg0 | sudo wg syncconf wg0 /dev/stdin
Mac側は次のような設定です。
[Interface]
PrivateKey = MAC_PRIVATE_KEY
Address = 10.66.66.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_VPS_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
ここに載せている MAC_PRIVATE_KEY / SERVER_PUBLIC_KEY / YOUR_VPS_IP は置き換え用の文字です。秘密鍵をブログへ貼らないでください。
9. Macから接続して外部IPv4が変わるか確認
Mac側でWireGuardを起動します。
sudo wg-quick up ~/.wireguard/racknerd-us.conf
VPN内部のVPSへPingします。
ping -c 4 10.66.66.1
私の実測では4/4応答、パケットロス0%でした。ただしNew York側VPSへの経路だったため、平均Pingは約300msと高めでした。
VPNをOFFにした状態とONにした状態で外部IPv4も比較しました。
sudo wg-quick down ~/.wireguard/racknerd-us.conf
curl -4 ifconfig.me
echo
sudo wg-quick up ~/.wireguard/racknerd-us.conf
curl -4 ifconfig.me
echo
実IPは記事では伏せますが、VPN ON時に外部から見えるIPv4が契約したRackNerd VPSのIPv4へ切り替わりました。
10. IPv6は別途対策が必要だった
ここは今回の検証で残った注意点です。
Mac側設定を AllowedIPs = 0.0.0.0/0 としているため、WireGuardへ入るのはIPv4です。実際に curl -6 ifconfig.me を実行するとIPv6アドレスが返りました。
つまり「全通信をRackNerd経由にするフルVPN」と考えるなら、このままではIPv6を別経路から出せる状態です。 さらに検証時のMacでは、以前構築した日本VPSのWireGuardもアプリ側で有効になっていたため、IPv6が元回線なのか別VPNなのかを切り分ける必要があります。 この記事では、確認できた範囲を正直に分けるためIPv4の海外VPSトンネル構築までを完成範囲とします。
完全なフルトンネルとして運用する場合は、IPv6をWireGuard側へルーティングする構成、IPv6を明示的に遮断する構成、DNS経路の確認などを追加で行う必要があります。
実際にやって分かったメリット・デメリット
| 良かった点 | 注意点 |
|---|---|
| 1GB / 1vCPUでもWireGuard用途なら軽い | VPSはアンマネージドなので設定・更新は自分で行う |
| 専用IPv4を自分のVPN出口として使える | 商用VPNのようにワンタップで多数国へ切替える用途には向かない |
| SSH・Firewall・WireGuardを自分で制御できる | 秘密鍵とバックアップの管理責任も自分にある |
| 年額$21.99で今回の実験を始められた | ロケーションや回線経路によって遅延は変わる。今回は約300ms |
| 実際にMacの外部IPv4がVPSへ変わることを確認できた | IPv6やDNSまで含めた「漏れ対策」は別途確認が必要 |
RackNerdが向いていそうな人
- LinuxやSSHを触りながら自分専用VPNを作ってみたい
- 海外に固定のIPv4出口を1つ持ちたい
- 低価格な小規模VPSから始めたい
- 障害対応やセキュリティ設定を自分で行える、または学びたい
逆に、VPNの設定やサーバー管理をしたくない人、複数国の出口を頻繁に切り替えたい人、24時間のアプリサポートを求める人は一般的なVPNサービスの方が扱いやすいと思います。
利用規約も確認しておく
RackNerdのVPSはアンマネージドが基本で、OS・Firewall・アプリ・バックアップ等は利用者側で管理する前提です。 また違法行為、スパム、ブルートフォース攻撃、DDoS等は禁止されています。利用目的に不明点がある場合は契約前に公式サポートへ確認してください。
まとめ
RackNerdの1GB KVM VPSへUbuntu 24.04を入れ、SSH鍵認証・UFW・WireGuardを設定して、MacからVPS経由でIPv4通信できるところまで確認できました。 「海外VPSを借りて自作VPNを作る」という実験としては、1GB / 1vCPUでも十分に動作しています。 一方で、IPv6とDNSを含めた完全なフルトンネル化は追加確認が必要です。今後そこまで仕上げた場合は、この検証の続きとして追記します。