summaryrefslogtreecommitdiffhomepage
path: root/vhosts/blog/content/posts
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-02-03 23:15:03 +0900
committernsfisis <nsfisis@gmail.com>2024-02-03 23:15:10 +0900
commit53e1f4f795b0dd68ef626d25412d5296e3c47aab (patch)
tree183e7508f7f5a50a7ec4ec670893c3987957810e /vhosts/blog/content/posts
parent66770b82cb6f187e98b5d4c206e44d63cf179d85 (diff)
downloadnsfisis.dev-53e1f4f795b0dd68ef626d25412d5296e3c47aab.tar.gz
nsfisis.dev-53e1f4f795b0dd68ef626d25412d5296e3c47aab.tar.zst
nsfisis.dev-53e1f4f795b0dd68ef626d25412d5296e3c47aab.zip
feat(blog/content): new post /posts/2024-02-03/install-wireguard-on-personal-server/
Diffstat (limited to 'vhosts/blog/content/posts')
-rw-r--r--vhosts/blog/content/posts/2024-02-03/install-wireguard-on-personal-server.ndoc167
1 files changed, 167 insertions, 0 deletions
diff --git a/vhosts/blog/content/posts/2024-02-03/install-wireguard-on-personal-server.ndoc b/vhosts/blog/content/posts/2024-02-03/install-wireguard-on-personal-server.ndoc
new file mode 100644
index 00000000..8e63f7a2
--- /dev/null
+++ b/vhosts/blog/content/posts/2024-02-03/install-wireguard-on-personal-server.ndoc
@@ -0,0 +1,167 @@
+---
+[article]
+title = "【備忘録】 個人用サーバに WireGuard を導入する"
+description = "個人用サービスのセルフホストに使っているサーバに WireGuard を導入する作業をしたメモ"
+tags = [
+ "note-to-self",
+ "wireguard",
+]
+
+[[article.revisions]]
+date = "2024-02-03"
+remark = "公開"
+---
+<article>
+ <section id="intro">
+ <h>はじめに</h>
+ <p>
+ 個人用サービスのセルフホストに使っているサーバに <a href="https://www.wireguard.com/">WireGuard</a> を導入する作業をしたのでメモ。
+ </p>
+ <p>
+ 登場するホストは以下のとおり:
+ </p>
+ <ul>
+ <li>サーバ (Ubuntu): <code>10.10.1.1</code></li>
+ <li>クライアント 1 (Windows): <code>10.10.1.2</code></li>
+ <li>クライアント 2 (Android): <code>10.10.1.3</code></li>
+ </ul>
+ <p>
+ 後ろの IP アドレスは VPN 内で使用するプライベート IP アドレス。
+ </p>
+ </section>
+ <section id="install-wireguard-server">
+ <h>WireGuard のインストール: サーバ</h>
+ <p>
+ まずは個人用サービスをホストしている Ubuntu のサーバに WireGuard をインストールする。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ sudo apt install wireguard
+ ]]>
+ </codeblock>
+ <p>
+ 次に、WireGuard で使用する鍵を生成する。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ wg genkey | sudo tee /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
+ $ sudo chmod 600 /etc/wireguard/server.{key,pub}
+ ]]>
+ </codeblock>
+ </section>
+ <section id="install-wireguard-client">
+ <h>WireGuard のインストール: クライアント</h>
+ <p>
+ 公式サイトから各 OS 向けのクライアントソフトウェアを入手し、インストールする。次に、設定をおこなう。
+ </p>
+ <codeblock language="ini">
+ <![CDATA[
+ # クライアント 1 の場合
+ [Interface]
+ Address = 10.10.1.2/32
+ PrivateKey = <クライアント 1 の秘密鍵>
+
+ [Peer]
+ PublicKey = <サーバの公開鍵>
+ AllowedIPs = <サーバの外部 IP アドレス>/32
+ Endpoint = <サーバの外部 IP アドレス>:51820
+ ]]>
+ </codeblock>
+ <codeblock language="ini">
+ <![CDATA[
+ # クライアント 2 の場合
+ [Interface]
+ Address = 10.10.1.3/32
+ PrivateKey = <クライアント 2 の秘密鍵>
+
+ [Peer]
+ PublicKey = <サーバの公開鍵>
+ AllowedIPs = <サーバの外部 IP アドレス>/32
+ Endpoint = <サーバの外部 IP アドレス>:51820
+ ]]>
+ </codeblock>
+ <p>
+ <code>PrivateKey</code> や <code>PublicKey</code> は鍵ファイルのパスではなく中身を書くことに注意。
+ </p>
+ </section>
+ <section id="configure-wireguard">
+ <h>
+ WireGuard の設定
+ </h>
+ <p>
+ 一度サーバへ戻り、WireGuard の設定ファイルを書く。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ sudo vim /etc/wireguard/wg0.conf
+ ]]>
+ </codeblock>
+ <codeblock language="ini">
+ <![CDATA[
+ [Interface]
+ Address = 10.10.1.1/32
+ SaveConfig = true
+ PrivateKey = <サーバの秘密鍵>
+ ListenPort = 51820
+
+ [Peer]
+ PublicKey = <クライアント 1 の公開鍵>
+ AllowedIPs = 10.10.1.2/32
+
+ [Peer]
+ PublicKey = <クライアント 2 の公開鍵>
+ AllowedIPs = 10.10.1.3/32
+ ]]>
+ </codeblock>
+ <p>
+ 次に、WireGuard のサービスを起動する。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ sudo systemctl enable wg-quick@wg0
+ $ sudo systemctl start wg-quick@wg0
+ ]]>
+ </codeblock>
+ </section>
+ <section id="configure-firewall">
+ <h>
+ ファイアウォールの設定
+ </h>
+ <p>
+ 続けてファイアウォールを設定する。まずは WireGuard が使用する UDP のポートを開き、<code>wg0</code> を通る通信を許可する。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ sudo ufw allow 51820/udp
+ $ sudo ufw allow in on wg0
+ $ sudo ufw allow out on wg0
+ ]]>
+ </codeblock>
+ <p>
+ 次に、80 や 443 などの必要なポートについて、<code>wg0</code> を経由してのアクセスのみ許可する。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ sudo ufw allow in on wg0 to any port 80 proto tcp
+ $ sudo ufw allow in on wg0 to any port 443 proto tcp
+ ]]>
+ </codeblock>
+ <p>
+ 最後に、<code>ufw</code> を有効にする。
+ </p>
+ <codeblock>
+ <![CDATA[
+ $ sudo ufw status
+ $ sudo ufw enable
+ ]]>
+ </codeblock>
+ </section>
+ <section id="connect-each-other">
+ <h>
+ 接続する
+ </h>
+ <p>
+ これで、各クライアントで VPN を有効にすると、当該サーバの 80 ポートや 443 ポートにアクセスできるようになったはずだ。念のため VPN を切った状態でアクセスできないことも確認しておくとよいだろう。
+ </p>
+ </section>
+</article>