📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の8版が非表示) | |||
| 237行目: | 237行目: | ||
ファイアウォールルールをWireGuardサーバに追加するため、/etc/wireguard/wg0.confファイルの最下行に、以下に示す設定を追記する。<br> | ファイアウォールルールをWireGuardサーバに追加するため、/etc/wireguard/wg0.confファイルの最下行に、以下に示す設定を追記する。<br> | ||
sudo vi /etc/wireguard/wg0.conf | sudo vi /etc/wireguard/wg0.conf | ||
<br> | |||
<syntaxhighlight lang="ini"> | |||
# /etc/wireguard/wg0.confファイル | # /etc/wireguard/wg0.confファイル | ||
| 248行目: | 249行目: | ||
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE | PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE | ||
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE | PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE | ||
</syntaxhighlight> | |||
<br> | <br> | ||
<code>PostUp</code>キー値は、WireGuardサーバが仮想VPNトンネルを開始するときに実行される。<br> | |||
上記の例では、3つのufwルールとiptablesルールが追加される。<br> | 上記の例では、3つのufwルールとiptablesルールが追加される。<br> | ||
<br> | <br> | ||
| 262行目: | 264行目: | ||
*: このルールは、マスカレードを設定して、wg0 VPNインタフェースから侵入してくるIPv6トラフィックを書き換えて、WireGuardサーバのパブリックIPv6アドレスから直接発信されているように見せかける。 | *: このルールは、マスカレードを設定して、wg0 VPNインタフェースから侵入してくるIPv6トラフィックを書き換えて、WireGuardサーバのパブリックIPv6アドレスから直接発信されているように見せかける。 | ||
<br> | <br> | ||
<code>PreDown</code>キー値は、WireGuardサーバが仮想VPNトンネルを停止するときに実行される。<br> | |||
これらのルールは、<code>PostUp</code>キー値の逆で、VPNが停止された時にVPNインターフェイスの転送ルールとマスカレードルールを元に戻す働きをする。<br> | |||
<br> | <br> | ||
どちらの場合も、VPNに適したIPv4ルールとIPv6ルールを含むか含まないか、設定を編集する。<br> | どちらの場合も、VPNに適したIPv4ルールとIPv6ルールを含むか含まないか、設定を編集する。<br> | ||
例えば、IPv4のみを使用しているのであれば、<code>ip6tables</code>コマンドで行を除外することができる。<br> | |||
逆に | 逆に IPv6のみを使うのであれば、<code>ip6tables</code>コマンドだけを含むように設定を編集する。<br> | ||
<br> | <br> | ||
<code>PreDown</code>キー値の<u>ufw 〜</u>と記述している設定は、IPv4とIPv6のネットワークの組み合わせに関係なく存在する必要がある。<br> | |||
<br> | <br> | ||
WireGuardサーバのファイアウォール設定の最後は、WireGuard UDPポート自体とのトラフィックを許可することである。<br> | WireGuardサーバのファイアウォール設定の最後は、WireGuard UDPポート自体とのトラフィックを許可することである。<br> | ||
また、WireGuardサーバの/etc/wireguard/wg0.confファイルでポートを変更しなかった場合、デフォルトで使用されるポートは<code>51820</code>である。<br> | |||
もし、別のポートを使用する場合は、必ず<code>ufw</code>コマンドを実行して、該当ポートを置き換えること。<br> | |||
<br> | <br> | ||
また、SSHのポートを開放すること。<br> | |||
sudo ufw allow 51820/udp | sudo ufw allow 51820/udp | ||
sudo ufw allow OpenSSH | sudo ufw allow OpenSSH | ||
| 304行目: | 306行目: | ||
ファイアウォールルールを設定した後、WireGuardサービス自体を起動してピア接続をリッスンすることができる。<br> | ファイアウォールルールを設定した後、WireGuardサービス自体を起動してピア接続をリッスンすることができる。<br> | ||
<br> | <br> | ||
==== 構築 ステップ6 : WireGuardサーバーの起動 ==== | ==== 構築 ステップ6 : WireGuardサーバーの起動 ==== | ||
WireGuardは、組み込みのwg-quickスクリプトを使用して、systemdサービスとして実行するように設定できる。<br> | WireGuardは、組み込みのwg-quickスクリプトを使用して、systemdサービスとして実行するように設定できる。<br> | ||
| 454行目: | 457行目: | ||
sudo vi /etc/wireguard/wg0.conf | sudo vi /etc/wireguard/wg0.conf | ||
<br> | <br> | ||
<syntaxhighlight lang="ini"> | |||
# /etc/wireguard/wg0.confファイル | # /etc/wireguard/wg0.confファイル | ||
| 463行目: | 467行目: | ||
[Peer] | [Peer] | ||
...略 | ...略 | ||
</syntaxhighlight> | |||
<br> | <br> | ||
* <code>PostUp</code>キー値 | * <code>PostUp</code>キー値 | ||
| 480行目: | 485行目: | ||
上記の[[設定 - VPNサーバ#構築 ステップ4 : WireGuardサーバのネットワーク設定の調整|構築 ステップ4 : WireGuardサーバのネットワーク設定の調整]]セクション、および、上記の[[設定 - VPNサーバ#構築 ステップ5 : WireGuardサーバのファイアウォールの設定|構築 ステップ5 : WireGuardサーバのファイアウォールの設定]]セクションを参照して、<br> | 上記の[[設定 - VPNサーバ#構築 ステップ4 : WireGuardサーバのネットワーク設定の調整|構築 ステップ4 : WireGuardサーバのネットワーク設定の調整]]セクション、および、上記の[[設定 - VPNサーバ#構築 ステップ5 : WireGuardサーバのファイアウォールの設定|構築 ステップ5 : WireGuardサーバのファイアウォールの設定]]セクションを参照して、<br> | ||
WireGuardサーバに正しいsysctlルールおよびiptablesルールを設定していることを確認すること。<br> | WireGuardサーバに正しいsysctlルールおよびiptablesルールを設定していることを確認すること。<br> | ||
<br> | |||
===== オプション 2 : WireGuardピアのDNSリゾルバの設定 ===== | |||
WireGuardサーバをピアトラフィック全体のVPNゲートウェイとして使用する場合は、[Interface]セクションにDNSリゾルバを指定する行を追加する必要がある。<br> | |||
この設定を行わない場合、DNSリクエストがVPNによって保護されなかったり、インターネットサービスプロバイダ(ISP)またはその他のサードパーティに公開される可能性がある。<br> | |||
<br> | |||
WireGuardを使用してVPNネットワーク上のリソースにアクセスする場合、または、ピアツーピア構成でのみ使用する場合は、このセクションをスキップすることができる。<br> | |||
<br> | |||
ピアの設定にDNSリゾルバを追加するには、まず、WireGuardサーバ上でWireGuardサーバが使用しているDNSサーバを特定する。<br> | |||
出力されるIPアドレスは、WireGuardサーバが使用しているDNSリゾルバである。<br> | |||
ニーズに応じて、これらのいずれかまたは全てを使用するかどうか、IPv4またはIPv6のみを使用するかどうかを選択することができる。<br> | |||
resolvectl dns <ネットワークインターフェース名> | |||
例 : resolvectl dns eth0 | |||
# 出力例 | |||
Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888 | |||
<br> | |||
次に、選択したリゾルバをWireGuardピアの設定ファイルに追加する必要がある。<br> | |||
WireGuardピア上にある/etc/wireguard/wg0.confファイルにおいて、[Peer]セクションの直前に以下に示す設定を追記する。<br> | |||
sudo vi /etc/wireguard/wg0.conf | |||
<br> | |||
<syntaxhighlight lang="ini"> | |||
# /etc/wireguard/wg0.confファイル | |||
DNS = 67.207.67.2 2001:4860:4860::8844 | |||
[Peer] | |||
...略 | |||
</syntaxhighlight> | |||
<br> | |||
この場合も、IPv4とIPv6の好みや要件に応じてリストを編集する。<br> | |||
<br> | |||
DNSリゾルバ設定が完了した後は、ピアの公開鍵をwireGuardサーバに追加して、ピア上でWireGuardトンネルを開始する。<br> | |||
<br> | |||
※注意<br> | |||
次のセクションでVPNに接続した後、[https://www.dnsleaktest.com/ DNSリークテスト]を実施して、VPN経由でDNSクエリを送信していることを確認することができる。<br> | |||
また、WireGuardサーバ上で実行したように、<code>resolvectl dns</code>コマンドを実行して、相手が設定されたリゾルバを使用していることを確認することもできる。<br> | |||
VPNトンネル用に設定したDNSリゾルバを示すような出力が得られるはずである。<br> | |||
# 出力例 | |||
Global: 67.207.67.2 67.207.67.3 | |||
...略 | |||
<br> | |||
==== 構築 ステップ8 : WireGuardサーバへのピアの公開鍵の追加 ==== | |||
ピアをWireGuardサーバに接続する前に、ピアの公開鍵をWireGuardサーバに追加する必要がある。<br> | |||
これにより、VPNに接続して、VPN上でトラフィックをルーティングできるようになる。<br> | |||
この手順を実施しない場合、WireGuardサーバは、ピアがトンネル上でトラフィックを送受信することを許可しない。<br> | |||
<br> | |||
まず、WireGuardピアのbase64エンコード公開鍵のコピーがあることを確認する。<br> | |||
sudo cat /etc/wireguard/public.key | |||
# 出力例 | |||
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= | |||
<br> | |||
次に、WireGuardサーバにログインして、以下のコマンドを実行する。<br> | |||
sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2 | |||
<br> | |||
<code>allowed-ips</code>オプションには、IPv4アドレスとIPv6アドレスをカンマ区切りで指定する。<br> | |||
ピアが自分自身に割り当てるIPアドレスを制限したい場合は個々のIPを指定する。<br> | |||
ピアがVPN範囲内のどのIPアドレスでも使用できる場合は、上記の例のように範囲を指定する。<br> | |||
また、2つのピアが同じ<code>allowed-ips</code>オプションを持つことはできないことに注意する。 | |||
<br> | |||
既存のピアの<code>allowed-ips</code>オプションを更新する場合は、同じコマンドを再度実行して、IPアドレスを変更する。<br> | |||
<br> | |||
複数のIPアドレスにも対応しており、例えば、追加したばかりのWireGuardピアを変更して、既存の10.8.0.2とfd24:609a:6c18::2のIPに10.8.0.100のようなIPを追加する場合は、<br> | |||
以下の例のように実行する。<br> | |||
sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2 | |||
<br> | |||
ピアを追加するコマンドを実行した後、<code>wg</code>コマンドを実行してWireGuardサーバ上のトンネルのステータスを確認する。<br> | |||
sudo wg | |||
# 出力例 | |||
interface: wg0 | |||
public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= | |||
private key: (hidden) | |||
listening port: 51820 | |||
peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= | |||
allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128 | |||
<br> | |||
<code>peer</code>の行には、WireGuardピアの公開鍵と、WireGuardピアが自分自身にIPを割り当てるために使用できるIPアドレスまたはアドレスの範囲が表示されていることに注意する。<br> | |||
<br> | |||
WireGuardサーバ上でピアの接続パラメータを定義したので、次のセクションではピア上でトンネルを開始する。<br> | |||
<br> | |||
==== 構築 ステップ9 : WireGuard ピアのトンネルへの接続 ==== | |||
WireGuardサーバとWireGuardピアの両方がIPv4、IPv6、パケット転送、DNS解決をサポートするように設定した後、最後にWireGuardピアをVPNトンネルに接続する。<br> | |||
<br> | |||
VPNを有効にする場面は特定のユースケースのみかもしれないため、<code>wg-quick</code>コマンドを実行して手動で接続を確立することにする。<br> | |||
WireGuardサーバ上で行ったようにトンネルの起動を自動化する場合は、<code>wq-quick</code>コマンドの代わりに、[[設定 - VPNサーバ#構築 ステップ6 : WireGuardサーバー]]の起動セクションの手順に従うこと。<br> | |||
<br> | |||
全てのトラフィックをVPN経由でルーティングして、DNS転送を設定している場合、トンネルを開始する前にWireGuardピアにresolvconfユーティリティをインストールする必要がある。<br> | |||
sudo apt install resolvconf | |||
<br> | |||
トンネルを開始するには、WireGuardピアで以下に示すコマンドを実行する。<br> | |||
sudo wg-quick up wg0 | |||
# 出力例 | |||
[#] ip link add wg0 type wireguard | |||
[#] wg setconf wg0 /dev/fd/63 | |||
[#] ip -4 address add 10.8.0.2/24 dev wg0 # WireGuardピアに割り当てたIPv4のアドレス | |||
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 # WireGuardピアに割り当てたIPv6のアドレス | |||
[#] ip link set mtu 1420 up dev wg0 | |||
[#] resolvconf -a tun.wg0 -m 0 -x | |||
<br> | |||
WireGuardピアの<code>AllowedIPs</code>を<code>0.0.0.0/0</code>と<code>::/0</code>に設定している場合、あるいは、VPN用に選んだ範囲以外を使用している場合、以下に示すような出力例となる。<br> | |||
# 出力例 | |||
[#] ip link add wg0 type wireguard | |||
[#] wg setconf wg0 /dev/fd/63 | |||
[#] ip -4 address add 10.8.0.2/24 dev wg0 # WireGuardピアに割り当てたIPv4のアドレス | |||
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 # WireGuardピアに割り当てたIPv6のアドレス | |||
[#] ip link set mtu 1420 up dev wg0 | |||
[#] resolvconf -a tun.wg0 -m 0 -x | |||
[#] wg set wg0 fwmark 51820 | |||
[#] ip -6 route add ::/0 dev wg0 table 51820 # コマンドが追加したルート (ピア設定の<u>AllowedIPs</u>に対応している) | |||
[#] ip -6 rule add not fwmark 51820 table 51820 | |||
[#] ip -6 rule add table main suppress_prefixlength 0 | |||
[#] ip6tables-restore -n | |||
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 # コマンドが追加したルート (ピア設定の<u>AllowedIPs</u>に対応している) | |||
[#] ip -4 rule add not fwmark 51820 table 51820 | |||
[#] ip -4 rule add table main suppress_prefixlength 0 | |||
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 | |||
[#] iptables-restore -n | |||
<br> | |||
WireGuardピア上のトンネルのステータスを確認する。<br> | |||
sudo wg | |||
# 出力例 | |||
interface: wg0 | |||
public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= | |||
private key: (hidden) | |||
listening port: 49338 | |||
fwmark: 0xca6c | |||
peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= | |||
endpoint: 203.0.113.1:51820 | |||
allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 | |||
latest handshake: 1 second ago | |||
transfer: 6.50 KiB received, 15.41 KiB sent | |||
<br> | |||
ip routeコマンドとip -6 routeコマンドを実行して、WirGuardピアがVPNを使用していることを確認する。<br> | |||
全てのインターネットトラフィックのゲートウェイとしてVPNを使用している場合、CloudFlareの1.1.1.1および2606:4700:4700::1111のDNSリゾルバ宛てのトラフィックにどのインターフェースが使用されるかを確認する。<br> | |||
<br> | |||
WireGuardを使用してVPN上のリソースにアクセスする場合のみ、ゲートウェイ自体のような有効なIPv4またはIPv6アドレスに置き換えること。<br> | |||
wg0デバイスが使用され、WireGuardピアに割り当てたIPv4アドレス10.8.0.2が使用されていることに注意すること。<br> | |||
例: 10.8.0.1またはfd24:609a:6c18::1<br> | |||
ip route get 1.1.1.1 | |||
# 出力例 | |||
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 | |||
cache | |||
<br> | |||
同様に、IPv6を使用している場合は、以下を実行する。<br> | |||
再度、wg0インターフェースと、WireGuardピアに割り当てたIPv6アドレスfd24:609a:6c18::2に注意すること。<br> | |||
ip -6 route get 2606:4700:4700::1111 | |||
# 出力例 | |||
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium | |||
<br> | |||
また、Webブラウザから、https://ipleak.net/ や https://ipv6-test.com/ にアクセスして、相手がVPN経由でトラフィックをルーティングしていることを確認することもできる。<br> | |||
<br> | |||
WireGuardピアのVPNを切断する準備ができた後は、<code>wg-quick</code>コマンドを実行する。<br> | |||
VPNトンネルがシャットダウンされたことを示す以下のような出力が表示される。<br> | |||
sudo wg-quick down wg0 | |||
# 出力例 | |||
[#] ip link delete dev wg0 | |||
[#] resolvconf -d tun.wg0 -f | |||
<br> | |||
例えば、WireGuardピアの<code>AllowedIPs</code>を<code>0.0.0.0/0</code>と<code>::/0</code>に設定した場合、あるいは、VPN用に選んだ範囲以外を使用した場合は、以下に示すような出力のようになる。<br> | |||
[#] ip rule delete table 200 from 203.0.113.5 | |||
[#] ip route delete table 200 default via 203.0.113.1 | |||
[#] ip -4 rule delete table 51820 | |||
[#] ip -4 rule delete table main suppress_prefixlength 0 | |||
[#] ip -6 rule delete table 51820 | |||
[#] ip -6 rule delete table main suppress_prefixlength 0 | |||
[#] ip link delete dev wg0 | |||
[#] resolvconf -d tun.wg0 -f | |||
[#] iptables-restore -n | |||
[#] ip6tables-restore -n | |||
<br> | |||
VPNに再接続するには、WireGuardピア上で以下に示すコマンドを再度実行する。<br> | |||
sudo wg-quick up wg0 | |||
<br> | |||
WireGuardサーバからピアの設定を完全に削除する場合は、削除するピアの公開鍵を正しく置き換えて、以下に示すコマンドを実行する。<br> | |||
sudo wg set wg0 peer <ピアの公開鍵の内容> remove | |||
# 実行例 | |||
sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove | |||
<br> | |||
<u>※注意</u><br> | |||
<u>通常、ピアの設定を削除する必要がある場合は、そのピアがもう存在しないか、暗号化キーが漏洩または変更された場合のみである。</u><br> | |||
<u>そうでない場合は、設定を残しておいたほうがよい。</u><br> | |||
<u>そのように運用することにより、ピアはその都度キーや<code>allowed-ips</code>を追加しなくても、VPNに再接続できるようになる。</u><br> | |||
<br><br> | <br><br> | ||