0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

海外行くからタダと使い回しでVPNサーバ建てた

0
Last updated at Posted at 2026-02-12

経緯

怪しいWi-Fi対策したいし、外から自宅サーバにアクセスできたら便利だろうなー。いつかVPN張りたいなーと思い続けてはや数年。
休職をきっかけに親から海外旅行に誘われ、海外のWi-Fi怖い!という気持ちから重い腰を上げました。
あと、旅行中も日本のアマプラでアニメ見たい。

やりたいこと

クライアント(主にスマホ)
  ↓
【VPN】
  ↓
OCI(踏み台)
  ↓
【VPN】
  ↓
自宅サーバ
  ↓
自宅NW & インターネット

要件

無料かつ今あるものを使って構築しようというエコノミーな発想です。

  • VM.Standard.E2.1.Micro
    (OCIインスタンス:AMD1コア Oracle Linux9)

    AlwaysFreeの範囲で使いたかったので。
    Arm?知らない子ですね?
  • WireGuard(VPN)
    「モバイル通信に強い」「処理が軽い」「設定簡単」
    という話を聞いて。
  • 自宅サーバ
    自宅のファイルサーバです。
    OS:Rocky Linux 9.7
    CPU:i5 6500
    メモリ:20 GB

やったこと

WireGuard(の制御ツール)をインストール

OracleLinuxにWireGuard自体は元から入っていたので、
以下コマンドでWireGuardの制御ツールをインストールします。

sudo dnf install wg-tools

秘密鍵と公開鍵を作成

WireGuardの秘密鍵を作成した後、対応する公開鍵を作成します。

sudo wg genkey | tee private.key #秘密鍵を作成
#(秘密鍵がここに表示される)
sudo cat private.key | sudo wg pubkey | tee public.pub #秘密鍵に対応する公開鍵を作成
#(公開鍵がここに表示される)

これをOCIと自宅サーバ、クライアントの分だけ実施しておきます。

設定ファイルを作成する

OCI側でWireGuardの設定ファイルを作成します。WireGuard用のインターフェース名はwg0としてます。

sudo vi /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
PrivateKey = [OCIのPrivateKey]
Address = 10.50.0.1/32
ListenPort = 51820
Table = 51820

PostUp = ip -4 rule add from 10.50.0.2/32 table 51820
PostUp = ip -4 rule add from 10.50.0.3/32 table 51820
PostUp = ip -4 route add 10.50.0.0/24 dev wg0
PostUp = sysctl -w net.ipv4.conf.all.rp_filter=2

PostDown = ip -4 rule del from 10.50.0.2/32 table 51820
PostDown = ip -4 rule del from 10.50.0.3/32 table 51820
PostDown = ip -4 route del 10.50.0.0/24 dev wg0

[Peer]
PublicKey = [クライアントのPublicKey]
AllowedIPs = 10.50.0.2/32

[Peer]
PublicKey = [自宅サーバのPublicKey]
AllowedIPs = 0.0.0.0/0

※WireGuard内でのIPアドレスは以下にしています。

  • 10.50.0.1:OCI
  • 10.50.0.2:クライアント(スマホ)
  • 10.50.0.254:自宅サーバ``

自宅サーバ側のwg0.confは以下にしてます。

/etc/wireguard/wg0.conf
[Interface]
PrivateKey = [自宅サーバのPrivateKey]
Address = 10.50.0.254/32

PostUp = iptables -t nat -A POSTROUTING -s 10.50.0.0/24 -o eth0 -j MASQUERADE
PostUp = iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
PostUp = iptables -A FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

PostDown = iptables -t nat -D POSTROUTING -s 10.50.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o eth0 -j ACCEPT

[Peer]
PublicKey = [OCIのPublicKey]
Endpoint = [OCIの実IPアドレス]:51820
AllowedIPs = 10.50.0.0/24
PersistentKeepalive = 25

firewalldの設定

OCI・自宅サーバ共にNATと転送設定をします。

  • NAT
firewall-cmd --permanent --zone=public --add-masquerade
  • 転送設定
sysctl -w net.ipv4.ip_forward=1 
# 一時反映

echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sysctl --system
# 永続化
  • (OCIのみ)UDPの51820ポートを開けます。
firewall-cmd --add-port=51820/udp --permanent
  • wg0をtrustedゾーンに追加
firewall-cmd --permanent --zone=trusted --add-interface=wg0
  • 反映
firewall-cmd --reload

VCNの設定

VCNとは、OCI側で用意されている仮想ネットワークのことです。
SSHとPing以外が弾かれるような状態になっているので、WireGuardの通信は通るようイングレス・ルールを追加します。

追加するイングレス・ルール

【外部通信用】
 ソースタイプ:CIDR
 ソースCIDR:0.0.0.0/0
 IPプロトコル:UDP
 宛先ポート:51820

【内部通信用】
 ソースタイプ:CIDR
 ソースCIDR:10.50.0.0/24
 IPプロトコル:すべてのプロトコル

WireGuard起動

以下コマンドでwg0を起動します。

wg-quick up wg0

以下も設定しておくと、OCI再起動時、自動で立ち上がるようになります。

sudo systemctl enable wg-quick@wg0

失敗したこと

やったことをつらつらと書きましたが、もちろん順調に行ったわけはなく、合間合間で何度もつまづきました。
なんなら、つまづいて対処してた時間のほうが断然長かった。
つまづいた箇所と対処を備忘録も兼ねて書いていきます。

WireGuardのアドレス帯が、OCIのデフォルトゲートウェイと衝突

【起きたこと】
当初、WireGuardのアドレス帯に10.0.0.0/24を使っていました。
しかし、OCIのデフォルトゲートウェイのアドレスが10.0.0.1だったため、デフォルトゲートウェイ宛の通信もwg0に渡す設定になってしまいました。
結果として、VPNの接続には成功するものの、インターネットへ出ることができない状況となり、それどころかSSHでの接続すらもできなくなってしまったため、復旧に大変手こずることになりました。

【対処】
OCIのコンソールからアクセスし、WireGuardで使用するアドレス帯を10.50.0.0/24に変更しました。

Pingが通らない

【起きたこと】
VPNもつながり、SSHも切れることがなくなったにも関わらず、何故かPingが通らない。
インターネットはおろか、VPN内のデバイスにすら通らない。

【対処】
パケット転送が有効になっていなかったので、以下の設定をOCIと自宅サーバの両方でやりました。

sudo sysctl -w net.ipv4.ip_forward=1

あとがき

記事をのんびりと書いてたら、親の金で行った海外旅行が終わってました。フランス楽しかったです。
僕の中のザッ○ーバーグも「Done is better than perfect!! Done is better than perfect!!」と叫び続けています。

モバイル通信をメインで利用し、旅行自体も結構忙しかったので、VPNの出番はほとんどありませんでした。
ですが、公衆Wi-Fiにアクセスしたときの心理的負担が軽減し、サーバにいつでも繋げるというワクワク感は手に入れたので良しとします。プライスレスです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?