MacでWireGuard設定完了
ついに外部からうちのLANに繋げることができました。
サブドメインとか設定してみたけど、最終的にはVPNに落ち着きましたね。
改めてうちのセッティングは
サーバー: Mac mini late2014, OS Catalina
クライアント MacBook pro, iPhone SE
主にこちらのサイトを参考にさせていただきました。
まず、母艦となるサーバーの設定です。
WireGuardをHomeBrew経由でインストールします。
brew install wireguard-tools
続いて設定ファイルを入れるフォルダを作成します。
usr/local/etc/wireguard
に作りました。
次にそのフォルダーの中に秘密鍵と公開鍵を生成します。
ターミナルで上記フォルダに移動して、
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
とすると、フォルダの中にprivatekeyとpublickeyというファイルが生成されます。
これらは後で使用します。
次に設定ファイルを作成します。
同じフォルダ内にwg0.confやcoordinates.confなどのテキストファイルを開いて、
以下のように記入します。
[Interface]
Address = 192.168.200.1/24 #VPNサーバーのアドレス。ネットワーク内にこの番号のルーターが新設される。既存のネットワークに重複しない番号。自分で決める。・・・①
PrivateKey = 先程生成されたprivatekey
ListenPort = 5555 #お好きな使っていないポートでOK・・・②
DNS = 8.8.8.8 #必須ではないですが、念の為・・・③
PostUp = /usr/local/etc/wireguard/postup.sh #後ほどファイルを生成します。・・・④
PostDown = /usr/local/etc/wireguard/postdown.sh #後ほどファイルを生成します。・・・⑤
[Peer] #クライアント1
PublicKey = クライアント1用のPublicKey #後ほどの設定で出てきます。・・・⑥
AllowedIPs = 192.168.200.2/32 #クライアントに割り当てるIP、自分で決めて良い・・・⑦
[Peer] #クライアント2 クライアントを追加するときは、このように追加していく。
PublicKey = クライアント2用のPublicKey #後ほどの設定で出てきます。
AllowedIPs = 192.168.200.3/32 #クライアントに割り当てるIP、重複しないように自分で決めて良い
続いて④のPostUpのファイルを作成します。
ファイル名は/usr/local/etc/wireguard/postup.shとしてください。
#!/bin/sh
/usr/sbin/sysctl -w net.inet.ip.forwarding=1
/usr/sbin/sysctl -w net.inet6.ip6.forwarding=1
mkdir -p /usr/local/var/run/wireguard
chmod 700 /usr/local/var/run/wireguard
echo 'nat on en0 from 192.168.200.2 to any -> (en0)' | \ #IPアドレスは①で新設したVPNサーバのIPアドレス
pfctl -a com.apple/wireguard_ipv4 -Ef - 2>&1 | \
grep 'Token' | \
sed 's%Token : (.*)%\1%' > /usr/local/var/run/wireguard/pf_wireguard_ipv4_token.txt
IPV4_TOKEN=sudo cat /usr/local/var/run/wireguard/pf_wireguard_ipv4_token.txt
echo "Added PF IPv4 NAT traffic routing rule with token: ${IPV4_TOKEN}"
このファイルは何をしているかというと、Wireguard起動時のみ新設されたIPアドレスの通信をLANに繋げて良いですよと言っています。
その際にIPアドレスを設定ファイルのと同じものを記載する必要があります。
またen0はご自身の環境に従って記入してください。
Ubuntuとかだとsysctlをいじってることが多いようです。
Macでもusr/sbin/sysctlがあるので、そちらをいじっても良いのかもしれません。
続いて⑤のPostDownのファイルです。
ファイル名は/usr/local/etc/wireguard/postdown.shとしてください。
!/bin/sh
# 1) Reverting our previously set IP forwarding overrides
/usr/sbin/sysctl -w net.inet.ip.forwarding=0
/usr/sbin/sysctl -w net.inet6.ip6.forwarding=0
#2) Remove the IPv4 filter rule by reference. Adding and
# removing rules by references like this will automatically
# disable the packet filter firewall if there are no other
# references left, but will leave it up if there are.
ANCHOR="com.apple/wireguard_ipv4"
pfctl -a ${ANCHOR} -F all || exit 1
echo "Removed IPv4 rule with anchor: ${ANCHOR}"
IPV4_TOKEN=sudo cat /usr/local/var/run/wireguard/pf_wireguard_ipv4_token.txt
pfctl -X ${IPV4_TOKEN} || exit 1
echo "Removed reference for token: ${IPV4_TOKEN}"
rm -rf /usr/local/var/run/wireguard/pf_wireguard_ipv4_token.txt
echo "Deleted IPv4 token file"
これは起動時の設定を終了するためのスクリプトですね。
つづいて両方のファイルに実行権限を与えます。
chmod u+x /usr/local/etc/wireguard/*.sh
続いてクライアントの設定です。
Macの場合はクライアントアプリケーションがあるので、そちらを活用します。
開くと、何もないので”設定が空のトンネルを追加”を選択します。

上記のような画面に公開鍵とPrivateKeyが記載された状態で表示されると思います。
ここに追記する形で設定を打ち込んでいきます。
[Interface]
PrivateKey = 何もしなくてOK
ListenPort = 5555 #②で設定したものと同じポート
Address = 192.168.200.2/24 #⑦でクライアント1に割り振ったIPアドレス
DNS = 8.8.8.8 #③で設定したDNS
[Peer]
PublicKey = VPNサーバーが生成したpublickey #クライアントのではありません。
AllowedIPs =192.168.200.0/24, 192.168.0.0/24 #VPNでのIP群と、すでにあるLANのIP群を記入する。
Endpoint = サーバーのグローバルIP or ドメイン名: 5555 #②でのポート
PersistentKeepalive = 25 #接続しっぱなしにする設定
です。またこの画面での公開鍵を母艦サーバーの設定ファイルの⑥に記載します。
要はそれぞれの設定ファイルにお互いの公開鍵を打ち込むことで通信を確立させる手法です。
これで設定は終わりましたので、母艦サーバーのターミナルで
wg-quick up /usr/local/etc/wireguard/coordinates.conf
と打ち込んで、VPNサーバーを起動し、クライアント側でも接続を開始することで繋がるはずです。
VPNサーバーを停止したり、設定を変えたときは
wg-quick down /usr/local/etc/wireguard/coordinates.conf
で停止できます。
iPhoneのクライアントでは

右上の”+”から空の状態を作成を選びます。
次に

次にキーペアの作成を押すと、秘密鍵と公開鍵が生成されますので、公開鍵を母艦の設定ファイル⑥に記載します。
IPアドレスは⑦で定めたものを記載します。
待受ポートは②のものですね。
DNSサーバーは③のものです。
下に行くとピアの追加があるので押します。


公開鍵はサーバーのprivatekeyの中身を打ち込みます。
エンドポイントはサーバーのグローバルIP or ドメイン名: 5555 #②でのポート
AllowedIPsは192.168.200.0/24, 192.168.0.0/24 #VPNでのIP群と、すでにあるLANのIP群を記入する。
持続敵キープアライブは25と打ち込みます。
これでiPhoneでも接続できるようになると思います。