2025/11/13(木)さらばHamachi

WireGuardに出会うことができましたので、hamachiからは卒業することとなりました。
これまでhamachi-VPNを使って、外出先から事務所パソコンにリモートデスクトップしたりしていたのですが、WireGuardに乗り換えました。
Wireguard自体は無料ですが、中継サーバーを使う方式としたので、若干の月額料金がかかりますが、hamachi有料版に比べれば安いものです。

それにしても、hamachiの解約は面倒でした。
解約ボタンなどなく、一般の問い合わせから、解約したいと英語で問い合わせ。
submitすると、「logmeinサポートまで電話をしないと、解約できない」と自動で告げられる。

日本の電話番号はあったのですが、英語対応。
解約するぞの一心で、たどたどしく解約を伝えました。
何度、最初はサポート、その次は請求部署に回され、さらに技術部署へとたらい回し。その都度、名前からメールアドレスからIDまで、何度も本人確認される。認証情報は引き継いでくれよん、と強く思いました。
何度も、解約理由についても聞かれました。だからもう使わないから解約なんだって。

しかし電話でも完結せず、メールのやりとりが必要とのこと。じゃあなんで電話を噛ますねん。

メールが来てからはスムーズ。何度も聞かれた解約理由をまた買いて、すべてのサービスの契約意思を改めて伝える。
確認のメールがきて、1.5日で終了しました。

それにしても、英語を電話で話さなければならないハードルの高さよ。
狙いだと思うけれども、そういう姿勢はいかがなものか。

さらば、Hamachi 十年以上お世話になったね。

antiXでVPN接続-wireguard

2025/11/11
wireguardでVPNを構築したので、覚書です。

antiXにwireguard導入(さらばhamachi)

sudo apt update
sudo apt install wireguard wireguard-tools
# wireguard用鍵ペアの作成
# 専用ディレクトリの作成
mkdir -p ~/wireguard-keys

#鍵ペアの作成
wg genkey | tee ~/wireguard-keys/private.key | wg pubkey > ~/wireguard-keys/public.key

chmod 600 ~/wireguard-keys/private.key
sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = (上で作成した秘密鍵)
Address = 10.200.0.10/32
DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = (中継サーバーの公開鍵)
AllowedIPs = 10.200.0.0/24
Endpoint = 160.xxx.xxx.185:5xxx0
PersistentKeepalive = 25
sudo chmod 600 /etc/wireguard/wg0.conf

手動起動

WireGuard を手動で起動・停止するには、wg-quick というコマンドラインツールを使用します。

1. 手動で接続を開始する

ターミナルを開き、以下のコマンドを実行します。
`wg0` の部分は、`/etc/wireguard/` に配置した設定ファイル名(例: `wg0.conf`)に合わせてください。
sudo wg-quick up wg0
2. 接続状態を確認する

接続が成功したか、現在の状態を確認するには、以下のコマンドを使用します。
ピア(接続先)の情報や、直近のハンドシェイク(通信確立)の時刻が表示されます。
sudo wg show
3. 手動で接続を停止する

接続を終了したい場合は、以下のコマンドを実行します。
sudo wg-quick down wg0

自動起動設定

WireGuard はインターフェース作成に root 権限が必要なため、単純に wg-quick up wg0 をユーザーセッションで実行しても失敗します。

環境例

OSantiX 23 runit
VPNツールWireGuard(wg-quick)
構成クライアント側VPN起動を自動化

sudoers許可+ユーザーセッションで起動(GUIログイン時にVPN)

特徴
  1. デスクトップログイン後にVPNを上げたい場合に便利。
  2. sudoパスワード入力を省略して自動起動可能。
手順
① sudoers に権限を追加
sudo visudo
次を末尾に追加
yourusername ALL=(ALL) NOPASSWD: /usr/bin/wg-quick up wg0, /usr/bin/wg-quick down wg0

(`yourusername` を実際のユーザー名に変更)
② `~/.desktop-session/startup` に起動コマンドを追加
# WireGuard 起動(sudo経由)

sudo /usr/bin/wg-quick up wg0 &
③ 確認
sudo wg
GUIログイン後に自動でVPN接続が確立します。
ログアウト・再起動後も再接続されます。

zoomtest

2025/11/11
Zoom ミーティングに参加する
https://us06web.zoom.us/j/84642735255?pwd=KYAfcfz2b9SYRDJbnoJdaGX2Sa1qmd.1

ミーティング ID: 846 4273 5255
パスコード: 352382

VPN-クライアント設定編WireGuard

2025/11/11
ウィンドウズ端末での追加設定はこちら

VPNに繋ぐクライアント設定

wireguardの外部サーバーを使った構成は、外部サーバー(中心的な中継サーバー)以外はすべて同じ扱いであり、どのパソコンからどのパソコンに繋ぐかは、運用として決めます。
ここでは、職場にあるwindows機A(10.200.0.2とする)に外出先パソコン2機(B機 windows 10.200.0.10,C機 linux 10.200.0.11)からつなぐような運用を想定しています。

構成概要

項目設定値
VPSグローバルIP160.xxx.xxx.185
WireGuardポート5xxx0/udp
VPNネットワーク10.200.0.0/24
VPS VPN IP10.200.0.1
事務所PC A10.200.0.2
外出先端末B (Windows)10.200.0.10
外出先端末C (Linux antiX)10.200.0.11

STEP 1: クライアント鍵ペア生成

Windows機での鍵ペア生成

WireGuard for Windowsのインストール
  1. 公式サイトからダウンロード:https://www.wireguard.com/install/
  2. wireguard-installer.exeを実行してインストール

鍵ペア生成

  1. WireGuardアプリを起動
  2. 「トンネルを追加」→「空のトンネルを追加」をクリック
  3. 自動的に秘密鍵と公開鍵が生成されるはず。
  4. トンネル名を入力(任意で決めて良い)
ここでトンネルの名前(すべて共通にする必要はないが、共通のほうが管理しやすいかも)を決めておきましょう
例: wireguard-tips456

※鍵ペアは、必ず、WireGuardの機能で作成するようにしましょう。専用のものです。

公開鍵の登録

それぞれのクライアント端末の公開鍵は、すべて中継サーバー(VPS)の設定に転記します。
中継サーバー(VPS)の公開鍵(public.key)は、すべてのクライアント端末のwireguardに転記します。
これにより、中継サーバーが中心となって、すべてのクライアント間のVPNを構築することとなります。
くれぐれも秘密鍵を転記しないようにしてください。

STEP 2: 中継サーバ側 Peer 登録

中継サーバ(さくらVPS)側の設定です。

/etc/wireguard/wg0.conf を編集します。

※microはお好きなエディタに置き換えてください。
sudo micro /etc/wireguard/wg0.conf
内容:
中継サーバーの情報はすでに、WireGuard設定時に記載されたはずなので、重複しないようにしてください。
サブネットマスクは中継サーバーだけが、/24 であり、他は /32 なので気を付けてください。

5xxx0はサーバー編で設定したUDPポートです
[Interface]
Address = 10.200.0.1/24
ListenPort = 5xxx0
PrivateKey = (サーバ秘密鍵)

# クライアント登録

[Peer]  # 事務所PC A
PublicKey = (office-pc-public.key)
AllowedIPs = 10.200.0.2/32

[Peer]  # 外出先端末B (Windows)
PublicKey = (mobile-win-public.key)
AllowedIPs = 10.200.0.10/32

[Peer]  # 外出先端末C (Linux antiX)
PublicKey = (mobile-linux-public.key)
AllowedIPs = 10.200.0.11/32
WireGuard再起動:
sudo systemctl restart wg-quick@wg0
sudo wg show

STEP 3: クライアント設定テンプレート

続いて、各クライアントに中継サーバーの公開鍵を転記します。
WireGuardのアプリの「編集」から、[Peer]のほうにサーバーの公開鍵を転記します。
中継サーバーの公開鍵は中継サーバーで確認し、コピーします。

公開鍵の確認
sudo wg show

事務所PC A (Windows)

160.xxx.xxx.185:5xxx0 は中継サーバのIPアドレスとポートです。

[Interface]は/32 [Peer] は/24
[Interface]
Address = 10.200.0.2/32
PrivateKey = (office-pc-private.key)
DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = (server_public.key)
Endpoint = 160.xxx.xxx.185:5xxx0
AllowedIPs = 10.200.0.0/24
PersistentKeepalive = 25

外出先端末B (Windows)

ウィンドウズ端末での追加設定はこちら
[Interface]
Address = 10.200.0.10/32
PrivateKey = (mobile-win-private.key)
DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = (server_public.key)
Endpoint = 160.xxx.xxx.185:5xxx0
AllowedIPs = 10.200.0.0/24
PersistentKeepalive = 25

外出先端末C (antiX Linux)

antiXの場合、
#DNS = 8.8.8.8, 1.1.1.1
とコメントアウトします。
WireGuardは、resolve.confをスタート時に書き換えるのですが、終了時に元に戻してくれません。
一般のlinuxであれば、linuxのほうでリカバリーできるそうですが、antiXは軽量版のため、そこまで面倒見がよくありません。
他の軽量linuxはわかりません。
[Interface]
Address = 10.200.0.11/32
PrivateKey = (mobile-linux-private.key)
#DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = (server_public.key)
Endpoint = 160.xxx.xxx.185:5xxx0
AllowedIPs = 10.200.0.0/24
PersistentKeepalive = 25

STEP 4: 接続テスト


# 各クライアントでVPN起動

wg-quick up wg0  # Linux

# Windows: WireGuardアプリで「有効化」

# VPSへPing

ping 10.200.0.1

# 事務所PCへPing

ping 10.200.0.2

# VPS側で確認

sudo wg show

Windows端末での注意点

Windowの設定によっては、以下の設定をしないとpingが通らないものもあるようです。
※ PowerShellを管理者権限で実行
私の環境では、下記の設定をしなくても通る機もあれば、1をしないと通らない機もあります。
2は遭遇していないですが、念のための記載です。

※ひょっとしたらインターネット直繋ぎか、プライベートLAN経由かによって違うのかもしれません。

1.WireGuardのネットワークを public → private に変更

Set-NetConnectionProfile -InterfaceAlias "(wireguardのトンネル名)" -NetworkCategory Private

2.10.200.0.0/24については、通信(TCP,RDP)が通るようにします。

# ICMP (Ping) を WireGuardサブネットから許可
New-NetFirewallRule -DisplayName "Allow ICMP from WireGuard subnet" `
  -Protocol ICMPv4 -Direction Inbound -Action Allow `
  -RemoteAddress 10.200.0.0/24 -Profile Private

# RDP (3389) を WireGuardサブネットから許可(必要なら)
New-NetFirewallRule -DisplayName "Allow RDP from WireGuard subnet" `
  -Protocol TCP -LocalPort 3389 -Direction Inbound -Action Allow `
  -RemoteAddress 10.200.0.0/24 -Profile Private

STEP 5: RDP確認

Windows外出先端末Bから:

RDP先: 10.200.0.2
ポート: 3389
ユーザ: 事務所PCのWindowsユーザ名

Linux外出先端末Cから:

remmina

# 新規接続: RDP / 10.200.0.2 / ユーザ名・パスワード

STEP 6: セキュリティ補足

秘密鍵(private.key)は絶対に他端末にコピーしない。
クライアント紛失時はwg0.confの該当Peerを削除。
firewalld / fail2banは既に恒久設定済み。

これでVPN網 (10.200.0.0/24) に3台のクライアントが登録完了し、外出先から事務所PCへRDPアクセスが可能になります。

使えるVPN-中継サーバ設定

2025/11/09

さくらVPS (AlmaLinux 9) WireGuard VPN構築 サーバー編

目的

512MBメモリのさくらインターネットVPS(AlmaLinux9)に、以下の構成で安全なVPN中継サーバを構築する。

WireGuard (VPN)
firewalld (nftables backend)
fail2ban (SSH保護)
swapfile (2GB)

構成概要

項目設定値備考
VPSグローバルIP160.xxx.xxx.185
外向きNICens3さくらVPS以外の方はここは要確認
SSHポート5xxx2/tcp50000台の任意なポートを設定
WireGuardポート5xxx0/udp50000台の任意なポートを設定
VPNネットワーク10.200.0.0/24255台分
VPSのVPN内IP10.200.0.1/24中継サーバのVPN上のIPアドレス
スワップ領域2GB (/swapfile)

STEP 0 さくらインターネットVPSクリーンインストール

さくらインターネットVPSをご参照ください。

STEP 1 基本設定

SWAP設定

最初に設定しないとメモリ不足でインストールできない場合があります。

swapfile (512MB RAM対策)

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show
free -h
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
echo 'vm.swappiness = 10' | sudo tee /etc/sysctl.d/99-swap-tune.conf
echo 'vm.vfs_cache_pressure = 100' | sudo tee -a /etc/sysctl.d/99-swap-tune.conf
sudo sysctl -p /etc/sysctl.d/99-swap-tune.conf

システムを最新に保つ

sudo dnf update -y
 リポジトリのメタデータを更新(キャッシュをリフレッシュ)。
 インストール済みパッケージのアップデート可能なものをリストアップ。
 アップデートをダウンロード・インストール(カーネルやセキュリティパッチを含む)。
 -yオプションにより、ユーザーの確認なしで進む。

ロケール設定(ja_JP.UTF-8)タイムゾーンと時刻同期設定

sudo dnf install -y glibc-langpack-ja
sudo localectl set-locale LANG=ja_JP.UTF-8

sudo timedatectl set-timezone Asia/Tokyo
sudo systemctl enable --now chronyd

SELinux 状態確認と無効化(構築が完了したら有効化しましょう)

さくらインターネットVPSのalmalinuxでは、SElinuxは当初からdisableのようであるが、念の為。
getenforce
sudo cp -a /etc/selinux/config /etc/selinux/config.bak-$(date +%Y%m%d)
sudo setenforce 0 || true
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
getenforce
grep '^SELINUX=' /etc/selinux/config
想定結果:
`Disabled`

この項目の詳しい解説はこちら。

基本パッケージ導入

sudo dnf install -y epel-release
sudo dnf install -y bash-completion curl wget git tar zip unzip bind-utils net-tools firewalld fail2ban glibc-langpack-ja telnet nc rsync screen  htop tree jq
この項目の詳しい解説はこちら。

エディタ導入

自分の好みのエディタをいれて構いませんが、ここでは vim-enhanced 、nano、microの3つを入れておきます。両方とも定評のあるエディタです。
nanoはシンプルで使いやすいですが、ショートカットキーがunixライクなので、windows環境に慣れている方はmicroのほうがいいかもしれません(好みです)。
vimは、プロには好まれますが、初学者には習熟するまで時間がかかるかも知れません。
エディタは複数インストールしておいて使いやすいのを使えばよいと思います。

nanoの導入
sudo dnf install -y nano vim-enhanced  
micro エディタは、EPELには含まれていないので、スクリプトから導入(直接バイナリ導入)する必要があります。

microの導入
cd ~
curl https://getmic.ro | bash
sudo mv ~/micro /usr/local/bin/micro

#microはそのままではパスが通らないので、通しておく。
#`sudo micro` 実行時に「command not found」になる問題の対策。
#sudo secure_path に /usr/local/bin を追加(恒久対策)

grep -Rq "/usr/local/bin" /etc/sudoers /etc/sudoers.d 2>/dev/null || {
echo 'Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin' | sudo tee /etc/sudoers.d/10-secure-path >/dev/null
sudo chmod 440 /etc/sudoers.d/10-secure-path
sudo visudo -cf /etc/sudoers.d/10-secure-path
}
#デフォルトエディタにmicoroを指定(デフォルトをnanoにしたい場合は下記のmicroをnanoに変更)
環境変数設定(冪等):
grep -q "EDITOR=micro" ~/.bashrc || echo 'export EDITOR=micro' >> ~/.bashrc
grep -q "VISUAL=micro" ~/.bashrc || echo 'export VISUAL=micro' >> ~/.bashrc
リポジトリにあるソフト(vim,nano)は、/usr/bin/ にインストールされますが、ここはOSやディストリビューションが管理するディレクトリなので、ディストリに含まれないmicroは/usr/local/binにインストールしています。今後、リポジトリにmicroが含まれるようになれば、nanoと一緒のディレクトリにインストールすることになるでしょう。


確認:
sudo -V | sed -n 's/^Secure Path: //p'

出力例:
`/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin`

この項目の詳しい解説はこちら。

STEP 2: WireGuard インストール

sudo dnf install -y epel-release
sudo dnf install -y wireguard-tools

STEP 3: WireGuardサーバ設定

鍵生成と設定作成

鍵ペアは必ず、WireGuard(=wg)で作成します。

※ポート番号置き換え
sudo mkdir -p /etc/wireguard && sudo chmod 700 /etc/wireguard
sudo wg genkey | sudo tee /etc/wireguard/server_private.key >/dev/null
sudo chmod 600 /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key >/dev/null
srv_priv=$(sudo cat /etc/wireguard/server_private.key)
sudo tee /etc/wireguard/wg0.conf >/dev/null <<EOF
[Interface]
Address = 10.200.0.1/24
ListenPort = 5xxx0
PrivateKey = ${srv_priv}
EOF
sudo chmod 600 /etc/wireguard/wg0.conf

起動

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show

STEP 4: IPフォワーディング有効化

カーネルパラメータレベルの設定(根本-これがないとfiwewalldの設定が機能しない)
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-wireguard.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

STEP 5: firewalld恒久設定

ファイヤーウォール設定についてはいろいろご意見あるかも知れません。
ゾーン設定し、vpsデフォルトのens3 と,wireguardで作成されるwg0をpublicゾーンに設定します。
そのうえで、masqueradeも設定しておきます。 forwardはデフォルトでyesになっているはずです。

※ポート番号置き換え
sudo systemctl enable --now firewalld
sudo firewall-cmd --set-default-zone=public

# firewall ゾーン設定
sudo firewall-cmd --permanent --zone=public --add-interface=wg0
sudo firewall-cmd --permanent --zone=public --add-masquerade

# RDPの穴開け ポート番号はご自分が設定しようとするものに変更してください
sudo firewall-cmd --permanent --add-port=5xxx0/udp

sudo firewall-cmd --reload
※--add-masqueradeとすることで、forward もyes となります。
# 確認
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --list-all
結果
public
  interfaces: wg0 ens3
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3 wg0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 5xxx0/udp
  protocols: 
  forward: yes
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

STEP 6: fail2ban firewalld連携設定

※ポート番号置き換え
あとで変更するSSHのポート番号に置き換え。SSHポート番号を置き換えない場合は、22,としておく。
sudo tee /etc/fail2ban/jail.local >/dev/null <<'EOF'
[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 5
backend  = systemd
banaction = firewallcmd-ipset
[sshd]
enabled  = true
port     = 5xxx2
logpath  = /var/log/secure
maxretry = 3
bantime  = 7200
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

STEP 7: SSH接続ポートの変更(セキュリティ強化)

SSH強化 (22→5xxx2/tcp) SSHログインポート番号変更(5xxx2はご自身の環境に置き換え)

# SSHの別穴開け
※ポート番号置き換え
sudo firewall-cmd --permanent --add-port=5xxx2/tcp

sudo firewall-cmd --reload

# sshdの設定を変更
※ポート番号置き換え
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i -e 's/^#*\s*Port .*/Port 5xxx2/' /etc/ssh/sshd_config
sudo sshd -t && sudo systemctl restart sshd
この設定のあとに今のセッションは切らずに、別windowで、ポート5xxx2番で繋がるかどうかテスト。
テスト完了後22番ポートを閉める。
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --reload
念の為、別windowで、ポート5xxx2番で繋がるかどうかテスト。22番で繋がらないことの確認。


最後に再起動
sudo reboot

まとめ

512MBメモリでも安定稼働するVPN中継サーバ構成。

swapfileでOOM対策
firewalldにNAT・フォワード・ポートを恒久登録
fail2banでSSHを防御

再起動後の自動起動確認:
sudo systemctl list-unit-files | egrep 'firewalld|wg-quick@wg0|fail2ban|vpn-firewalld'
次は、クライアントの設定です。