このチュートリアルでは、Debian11ブルズアイとDebian10バスターで独自のWireGuardVPNサーバーをセットアップする方法を紹介します。 WireGuardはLinuxカーネル専用に作られています。 Linuxカーネル内で実行され、高速で最新の安全なVPNトンネルを作成できます。
WireGuardVPNの機能
- 軽量で超高速、OpenVPNを水から吹き飛ばします。
- クロスプラットフォーム。 WireGuardは、Linux、BSD、macOS、Windows、Android、iOS、およびOpenWRTで実行できます。
- ユーザー認証は、SSHキーと同様に公開キーを交換することによって行われます。
- 静的トンネルIPアドレスをVPNクライアントに割り当てます。気に入らない人もいるかもしれませんが、場合によっては便利です。
- モバイルデバイスは、接続を切断することなく、Wi-Fiとモバイルネットワークをシームレスに切り替えることができます。
- ほとんどのユースケースでOpenVPNとIPSecを置き換えることを目的としています。
要件
このチュートリアルに従うには、ブロックされたWebサイトに自由にアクセスできるVPS(仮想プライベートサーバー)が必要です(国外またはインターネットフィルタリングシステム)。次の機能を備えたカマテラVPSをお勧めします:
- 30日間の無料トライアル。
- 月額4ドル(1 GB RAM)から
- 高性能KVMベースのVPS
- 米国、カナダ、英国、ドイツ、オランダ、香港、イスリアルを含む世界中の9つのデータセンター。
以下にリンクされているチュートリアルに従って、KamateraでLinuxVPSサーバーを作成してください。
- カマテラでLinuxVPSサーバーを作成する方法
Debianを実行しているVPSを入手したら、以下の手順に従ってください。
このチュートリアルでは、VPNサーバーとVPNクライアントの両方が Debianを実行していることを前提としています。 オペレーティングシステム。
ステップ1:DebianサーバーとデスクトップにWireGuardをインストールする
Debianサーバーにログインします。 WireGuardはDebian11(Bullseye)に含まれています リポジトリなので、次のコマンドを実行してインストールできます。
sudo apt updatedsudo apt install wireguard wireguard-tools linux-headers-$(uname -r)
Debian 10 ユーザーは、次のコマンドを使用してバックポートリポジトリを追加する必要があります。
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list
次に、WireGuardをインストールします。
sudo apt updatedsudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)
同じコマンドを使用して、ローカルのDebianコンピューター(VPNクライアント)にWireGuardをインストールします。 openresolv
もインストールする必要があることに注意してください DNSサーバーを構成するためのクライアント上のパッケージ。
sudo apt install openresolv
ステップ2:パブリック/プライベートキーペアを生成する
サーバー
Debianサーバーで次のコマンドを実行して、公開鍵と秘密鍵のペアを作成します。これは、/etc/wireguard/
の下に保存されます。 ディレクトリ。
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
クライアント
次のコマンドを実行して、ローカルのDebianコンピューター(VPNクライアント)に公開鍵と秘密鍵のペアを作成します。
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
ステップ3:WireGuard構成ファイルを作成する
サーバー
Nanoなどのコマンドラインテキストエディタを使用して、Debianサーバー上にWireGuard構成ファイルを作成します。 wg0
ネットワークインターフェース名になります。
sudo nano /etc/wireguard/wg0.conf
次のテキストをコピーして、構成ファイルに貼り付けます。独自のサーバー秘密鍵とクライアント公開鍵を使用する必要があります。
[Interface] Address =10.10.10.1/24ListenPort =51820PrivateKey =cD + ZjXiVIX + 0iSX1PNijl4a + 88lCbDgw7kO78oXXLEc =[Peer] PublicKey =AYQJf6HbkQ0X0Xyt + cTMTuJe3RFwbuCMF
![]()
場所:
- 住所 :VPNサーバーのプライベートIPアドレスを指定します。ここでは10.10.10.0/24のネットワーク範囲を使用しているため、ホームネットワークの範囲と競合することはありません。 (ほとんどのホームルーターは192.168.0.0/24または192.168.1.0/24を使用します)。 10.10.10.1は、VPNサーバーのプライベートIPアドレスです。
- PrivateKey :VPNサーバーの秘密鍵。
/etc/wireguard/server_private.key
にあります。 サーバー上のファイル。 - ListenPort :WireGuard VPNサーバーは、デフォルトのUDPポート51820でリッスンします。
- PublicKey :VPNクライアントの公開鍵。
/etc/wireguard/client_public.key
にあります。 クライアントコンピュータ上のファイル。 - 許可されたIP :VPNクライアントが使用を許可されているIPアドレス。この例では、クライアントはVPNトンネル内でのみ10.10.10.2IPアドレスを使用できます。
ファイルを保存して閉じます。 (Nanoテキストエディタでファイルを保存するには、Ctrl+O
を押します。 、Enterキーを押して確認します。 Ctrl+X
を押します 終了します。)
rootユーザーのみがファイルを読み取ることができるように、ファイルのアクセス許可モードを変更します。
sudo chmod 600 / etc / wireguard / -R
クライアント
Nanoなどのコマンドラインテキストエディタを使用して、ローカルのDebianコンピュータにWireGuard構成ファイルを作成します。 wg-client0
ネットワークインターフェース名になります。
sudo nano /etc/wireguard/wg-client0.conf
次のテキストをコピーして、構成ファイルに貼り付けます。独自のクライアント秘密鍵とサーバー公開鍵を使用する必要があります。
[Interface] Address =10.10.10.2 / 24DNS =10.10.10.1PrivateKey =cOFA + x5UvHF + a3xJ6enLatG + DoE3I5PhMgKrMKkUyXI =[Peer] PublicKey =kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf / pre>場所:
- 住所 :VPNクライアントのプライベートIPアドレスを指定します。
- DNS :DNSサーバーとして10.10.10.1(VPNサーバー)を指定します。
resolvconf
を介して構成されます 指図。次のように、冗長性のために複数のDNSサーバーを指定することもできます:DNS = 10.10.10.1 8.8.8.8
- PrivateKey :クライアントの秘密鍵。
/etc/wireguard/client_private.key
にあります。 クライアントコンピュータ上のファイル。 - PublicKey :サーバーの公開鍵。
/etc/wireguard/server_public.key
にあります。 サーバー上のファイル。 - 許可されたIP :0.0.0.0/0はインターネット全体を表します。つまり、インターネットへのすべてのトラフィックはVPN経由でルーティングされる必要があります。
- エンドポイント :VPNサーバーのパブリックIPアドレスとポート番号。 12.34.56.78をサーバーの実際のパブリックIPアドレスに置き換えます。
- PersistentKeepalive :認証された空のパケットを25秒ごとにピアに送信して、接続を維持します。 PersistentKeepaliveが有効になっていない場合、VPNサーバーがVPNクライアントにpingを実行できない可能性があります。
ファイルを保存して閉じます。
rootユーザーのみがファイルを読み取れるようにファイルモードを変更します。
sudo chmod 600 / etc / wireguard / -R
ステップ4:サーバーでIP転送を有効にする
VPNサーバーがVPNクライアントとインターネット間でパケットをルーティングするには、IP転送を有効にする必要があります。 sysctl.conf
を編集します ファイル。
sudo nano /etc/sysctl.conf
このファイルの最後に次の行を追加します。
net.ipv4.ip_forward =1
ファイルを保存して閉じます。次に、以下のコマンドで変更を適用します。 -p オプションは、 /etc/sysctl.confからsysctl設定をロードします ファイル。このコマンドは、システムを再起動しても変更を保持します。
sudo sysctl -p
ステップ5:サーバーでIPマスカレードを構成する
サーバーがVPNクライアントの仮想ルーターになるように、サーバーファイアウォールでIPマスカレードを設定する必要があります。 iptablesファイアウォールのフロントエンドであるUFWを使用します。次のコマンドを使用してDebianにUFWをインストールします:
sudo apt install ufw
まず、SSHトラフィックを許可する必要があります。
sudo ufw allow 22 / tcp
次に、サーバーのメインネットワークインターフェースの名前を見つけます。
ip addr
ご覧のとおり、ens3
という名前です。 私のDebianサーバーで。
IPマスカレードを設定するには、UFW設定ファイルにiptablesコマンドを追加する必要があります。
sudo nano /etc/ufw/before.rules
デフォルトでは、filter
にはいくつかのルールがあります テーブル。このファイルの最後に次の行を追加します。 ens3
を置き換えます 独自のネットワークインターフェイス名を使用します。
#NATテーブルルール* nat:POSTROUTINGACCEPT [0:0]-A POSTROUTING -o ens3 -j MASQUERADE#各テーブルを「COMMIT」行で終了します。終了しないと、これらのルールは処理されませんCOMMIT
Nanoテキストエディタでは、Ctrl+W
を押すと、ファイルの最後に移動できます。 、次にCtrl+V
を押します 。
上記の行が追加されます( -A ) POSTROOUTINGの最後までのルール natのチェーン テーブル。仮想プライベートネットワークをインターネットにリンクします。また、ネットワークを外界から隠します。そのため、インターネットはVPNサーバーのIPしか見ることができませんが、ホームルーターがプライベートホームネットワークを隠すように、VPNクライアントのIPを見ることができません。
デフォルトでは、UFWはパケット転送を禁止しています。プライベートネットワークの転送を許可できます。 ufw-before-forward
を見つけます このファイルにチェーンを追加し、次の3行を追加します。これは、送信元IPまたは宛先IPが10.10.10.0/24
にある場合にパケット転送を受け入れます。 範囲。
#信頼できるネットワークの転送を許可する-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
ファイルを保存して閉じます。次に、UFWを有効にします。
sudo ufw enable
以前にUFWを有効にしたことがある場合は、systemctlを使用してUFWを再起動できます。
sudo systemctl restart ufw
ここで、次のコマンドを使用して、NATテーブルのPOSTROUTINGチェーンにルールをリストするとします。
sudo iptables -t nat -L POSTROUTING
仮面舞踏会のルールを見ることができます。
ステップ6:サーバーにDNSリゾルバーをインストールする
クライアントのDNSサーバーとしてVPNサーバーを指定したため、VPNサーバーでDNSリゾルバーを実行する必要があります。 bind9DNSサーバーをインストールできます。
sudo apt install bind9
インストールすると、BINDが自動的に起動します。次のコマンドでステータスを確認できます:
systemctl status bind9
サンプル出力:
●named.service-BINDドメインネームサーバーロード済み:ロード済み(/lib/systemd/system/named.service;有効;ベンダープリセット:有効)アクティブ:Sun 2020-05-17 08:11以降アクティブ(実行中) :26 UTC; 37秒前ドキュメント:man:named(8)メインPID:13820(名前付き)タスク:5(制限:1074)メモリ:14.3M CGroup:/system.slice/named.service└─13820/ usr / sbin / named -f -u bind
実行されていない場合は、次のコマンドで開始します:
sudo systemctl start bind9
BINDDNSサーバーの構成ファイルを編集します。
sudo nano /etc/bind/named.conf.options
次の行を追加して、VPNクライアントが再帰的なDNSクエリを送信できるようにします。
allow-recursion {127.0.0.1; 10.10.10.0/24; };
ファイルを保存して閉じます。変更を有効にするには、BIND9を再起動します。
sudo systemctl restart bind9
次に、次のコマンドを実行して、VPNクライアントがポート53に接続できるようにする必要があります。
sudo ufw insert 1 allow in from 10.10.10.0/24
ステップ7:ファイアウォールでWireGuardポートを開く
次のコマンドを実行して、サーバーのUDPポート51820を開きます。
sudo ufw allow 51820 / udp
ステップ8:WireGuardを起動します
サーバー
サーバーで次のコマンドを実行して、WireGuardを起動します。
sudo wg-quick up /etc/wireguard/wg0.conf
停止するには、
を実行しますsudo wg-quick down /etc/wireguard/wg0.conf
systemdサービスを使用してWireGuardを起動することもできます。
sudo systemctlstart[メール保護]
システムの起動時に自動起動を有効にします。
sudo systemctl enable [email protected]
次のコマンドでステータスを確認してください。そのステータスはactive (exited)
である必要があります 。
systemctl status [email protected]
これで、WireGuardサーバーはクライアント接続を受け入れる準備ができました。
クライアント
WireGuardを起動します。
sudo systemctlstart[メール保護]
システムの起動時に自動起動を有効にします。
sudo systemctl enable [email protected]
ステータスを確認してください:
systemctl status [email protected]
次に、次のWebサイトにアクセスします:http://icanhazip.com/
パブリックIPアドレスを確認します。すべてがうまくいけば、クライアントコンピュータのパブリックIPアドレスではなく、VPNサーバーのパブリックIPアドレスが表示されるはずです。
次のコマンドを実行して、現在のパブリックIPアドレスを取得することもできます。
curl https://icanhazip.com
トラブルシューティングのヒント
pingテスト
VPNサーバーからVPNクライアントにpingを実行できます(ping 10.10.10.2
)トンネルが機能するかどうかを確認します。 pingに次のエラーメッセージが表示された場合は、
ping:sendmsg:必要なキーが利用できません
AllowedIPs
の可能性があります タイプミスのように、パラメータが間違っています。
pingエラーメッセージが
の場合ping:sendmsg:宛先アドレスが必要です
構成ファイルの秘密/公開鍵が間違っている可能性があります。
インターネットを閲覧できません
VPNトンネルが正常に確立されても、クライアントのパブリックIPアドレスが変更されない場合は、UFW設定ファイルのマスカレードまたは転送ルールが機能していないことが原因です。 /etc/ufw/before.rules
にタイプミスがあったことがあります ファイルが原因で、コンピュータがインターネットを閲覧できなくなりました。
SaveConfig=true
の使用はお勧めしません。 [Interface]
で WireGuard構成ファイルのセクション。 SaveConfig
シャットダウン時にランタイム構成を保存するようにWireGuardに指示します。したがって、[Peer]
を追加すると 構成ファイルでWireGuardを再起動すると、新しく追加された構成が上書きされます。
Linuxカーネルでデバッグログを有効にする
Linuxカーネル5.6以降を使用している場合は、次のコマンドを使用してWireGuardのデバッグログを有効にできます。
sudo su -echo module wireguard + p> / sys / kernel / debug / dynamic_debug / control
次に、
を使用してデバッグログを表示できます。sudo dmesg -wH
または
sudo journalctl -kf
再起動
それでもVPNが機能しない場合は、VPNサーバーを再起動してみてください。
sudo systemctlrestart[メール保護]
次に、VPNクライアントを停止します。
sudo systemctl stop [email protected]
そして、VPNクライアントのソフトウェアパッケージをアップグレードします。
sudo apt update; sudoaptアップグレード
次に、VPNクライアントを再起動します。
sudo shutdown -r nowsudo systemctl start [email protected]
VPNクライアントの追加
WireGuardは、1つのIPアドレスを1つのVPNクライアントに関連付けるように設計されています。 VPNクライアントをさらに追加するには、クライアントごとに一意の秘密鍵と公開鍵のペアを作成してから、サーバーの構成ファイル(/etc/wireguard/wg0.conf
)に各VPNクライアントの公開鍵を追加する必要があります。 )このように:
[Interface] Address =10.10.10.1/24PrivateKey =UIFH + XXjJ0g0uAZJ6vPqsbb / o68SYVQdmYJpy / FlGFA =ListenPort =51820 [Peer] PublicKey =75VNV7HqFh + 3QIT5OHZkcjWfbjx8tc6Ck 1Z / 3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8 =AllowedIPs =10.10.10.3 / 32 [Peer] PublicKey =EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8 =AllowedIPs =10.10.10.4 / 32
各VPNクライアントには静的プライベートIPアドレス(10.10.10.2、10.10.10.3、10.10.10.4など)があります。変更を有効にするには、WireGuardサーバーを再起動します。
sudo systemctlrestart[メール保護]
次に、通常どおり各VPNクライアントにWireGuard構成を追加します。
ポリシールーティング、スプリットトンネリング、VPNキルスイッチ
次に、ポリシールーティングの使用方法を説明します。 、スプリットトンネリング 、およびVPNキルスイッチ WireGuardVPNを使用します。 注 それらを組み合わせて使用することはお勧めしません。ポリシールーティングを使用する場合は、スプリットトンネリングまたはVPNキルスイッチを有効にしないでください。その逆も同様です。
ポリシールーティング
デフォルトでは、VPNクライアント上のすべてのトラフィックはVPNサーバーを介してルーティングされます。トランスポート層プロトコルと宛先ポートに基づいて、特定のタイプのトラフィックのみをルーティングしたい場合があります。これは、ポリシールーティングと呼ばれます。
ポリシールーティングはクライアントコンピューターで構成されており、WireGuardクライアントプロセスを停止する必要があります。
sudo systemctl stop [email protected]
次に、クライアント構成ファイルを編集します。
sudo nano /etc/wireguard/wg-client0.conf
たとえば、[interface]
に次の3行を追加すると セクションの次に、WireGuardは「1234」という名前のルーティングテーブルを作成し、IPルールをルーティングテーブルに追加します。この例では、トラフィックは、TCPがトランスポート層プロトコルとして使用され、宛先ポートが25の場合、つまりクライアントコンピューターが電子メールを送信する場合にのみVPNサーバーを介してルーティングされます。
Table =1234PostUp =ip rule add ipproto tcp dport 25 table 1234PreDown =ip rule delete ipproto tcp dport 25 table 1234
ファイルを保存して閉じます。次に、WireGuardクライアントを再起動します。
sudo systemctlstart[メール保護]
スプリットトンネリング
デフォルトでは、VPNクライアント上のすべてのトラフィックはVPNサーバーを介してルーティングされます。スプリットトンネリングを有効にして、10.10.10.0/24
へのトラフィックのみを有効にする方法は次のとおりです。 IP範囲はWireGuardVPNを介してトンネリングされます。これは、複数のクラウドサーバー用のプライベートネットワークを構築する場合に役立ちます。VPNクライアントはクラウドサーバー上で実行され、完全なVPNトンネルを使用すると、クラウドサーバーへの接続が失われる可能性があるためです。
クライアント構成ファイルを編集します。
sudo nano /etc/wireguard/wg-client0.conf
変更
AllowedIPs =0.0.0.0/0
宛先
AllowedIPs =10.10.10.0/24
したがって、トラフィックは、宛先アドレスが10.10.10.0/24IP範囲内にある場合にのみVPN経由でルーティングされます。ファイルを保存して閉じます。次に、WireGuardクライアントを再起動します。
sudo systemctlrestart[メール保護]
VPNキルスイッチ
デフォルトでは、VPN接続が中断された場合、コンピューターは通常のゲートウェイを介してインターネットにアクセスできます。キルスイッチ機能を有効にすることをお勧めします。これにより、暗号化されていないパケットがWireGuard以外のインターフェイスを通過するのを防ぎます。
WireGuardクライアントプロセスを停止します。
sudo systemctl stop [email protected]
クライアント構成ファイルを編集します。
sudo nano /etc/wireguard/wg-client0.conf
[interface]
に次の2行を追加します セクション。
PostUp =iptables -I OUTPUT! -o%i -mマーク! --mark $(wg show%i fwmark)-m addrtype! --dst-type LOCAL -j REJECTPreDown =iptables -D OUTPUT! -o%i -mマーク! --mark $(wg show%i fwmark)-m addrtype! --dst-type LOCAL -j REJECT
このように:
[Interface] Address =10.10.10.2 / 24DNS =10.10.10.1PrivateKey =cOFA + x5UvHF + a3xJ6enLatG + DoE3I5PhMgKrMKkUyXI = PostUp =iptables -I OUTPUT! -o%i -mマーク! --mark $(wg show%i fwmark)-m addrtype! --dst-type LOCAL -j REJECTPreDown =iptables -D OUTPUT! -o%i -mマーク! --mark $(wg show%i fwmark)-m addrtype! --dst-type LOCAL -j REJECT [Peer] PublicKey =kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0 =AllowedIPs =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
ファイルを保存して閉じます。次に、WireGuardクライアントを起動します。
sudo systemctlstart[メール保護]
Debian10へのLinuxカーネル5.xのインストール
Debian10の現在のLinuxカーネルバージョンは4.19です。ステップ1で、Debian10にバックポートリポジトリを追加しました。バックポートリポジトリ この記事の執筆時点では、Linuxカーネル5.10が含まれています。おそらく、wireguardモジュールがバージョン5.4以降のLinuxカーネルに含まれていることをご存知かもしれません。 Linuxカーネル5.10をDebian10にインストールする場合、システムがLinuxカーネルをアップグレードするときにwireguardモジュールをビルドする必要はありません。実際のところ、私のDebian10サーバーはかつてwireguard-dkmsを使用してwireguardモジュールを構築する際に問題がありました。
この記事を読むまでに、Debian 10バックポートリポジトリがカーネル5.10を削除し、カーネル5.11を組み込んでいる可能性があることに注意してください。次のコマンドで5.8を5.9に置き換えるだけです。
Linuxカーネル5.8をDebian10クラウドサーバーにインストールするには、次のコマンドを実行します。
sudo apt install linux-image-5.10.0-0.bpo.7-cloud-amd64 linux-headers-5.10.0-0.bpo.7-cloud-amd64
Linuxカーネル5.8をDebian10PCにインストールするには、次のコマンドを実行します。
sudo apt install linux-image-5.10.0-0.bpo.7-amd64 linux-headers-5.10.0-0.bpo.7-amd64
次に、Debian10ボックスを再起動します。
sudo shutdown -r now
Linuxカーネルのバージョンを確認してください。
uname -r
サンプル出力
5.10.0-0.bpo.7-cloud-amd64
wireguard-dkms
はもう必要ありませんが パッケージ、これはwireguard
の依存関係です パッケージなので、システムから削除できません。 wireguard
をアップグレードすると、おそらく次のエラーが表示されます。 パッケージ。
エラー!このモジュールのdkms.confには、このカーネル/archと一致しないBUILD_EXCLUSIVEディレクティブが含まれています。これは、ビルドすべきではないことを示しています
これは、wireguard-dkms
を示します wireguard
を構築しようとしています モジュールをLinuxカーネルに組み込みますが、Linux5.10にはネイティブのwireguard
が含まれています モジュールなので、ビルド操作は防止され、このエラーは無視できます。