Wireguardとは
wireguardはVPNです。
その他詳しいことは調べてください。
記事の目的と利用方法
この記事は筆者のMEMOです。
後述のスクリプトを利用することでwireguardを容易に設定できます。
利用方法は以下の通りです。
- 初期設定:
wg-setup.sh
を実行します。 - peerを追加:
wg-peer.sh 172.16.42.x
を実行してください。
172.16.42.x
のx
にあたる部分は適宜変更してください。
wg-setup.sh
INTERFACE=
は適宜変更してください。
#!/bin/bash
PS4="[ \e[32mOK\e[m ] "
set -xue
sudo apt-get update > /dev/null
sudo apt-get install iptables resolvconf wireguard qrencode jq -y > /dev/null
sudo rm -rf /etc/wireguard/keypairs
sudo mkdir /etc/wireguard/keypairs
PRIVATE_KEY=`wg genkey | sudo tee -a /etc/wireguard/keypairs/server.key`
PUBLIC_KEY=`sudo cat /etc/wireguard/keypairs/server.key | wg pubkey | sudo tee -a /etc/wireguard/keypairs/server.pub`
INTERFACE=eth0
cat <<EOF | sudo tee -i /etc/wireguard/wg0.conf > /dev/null
[Interface]
PrivateKey=$PRIVATE_KEY
Address=172.16.42.1
ListenPort=51820
PostUp=iptables -A FORWARD -i wg0 -j ACCEPT && iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE
PostDown=iptables -D FORWARD -i wg0 -j ACCEPT && iptables -t nat -D POSTROUTING -o $INTERFACE -j MASQUERADE
EOF
sudo cat /etc/sysctl.conf | sudo sed -i '/net.ipv4.ip_forward=1/c net.ipv4.ip_forward=1' /etc/sysctl.conf
sudo sysctl -p > /dev/null
sudo systemctl enable --now wg-quick@wg0
wg-peer.sh
172.168.42.0/24
であることを想定して作っています。
#!/bin/bash
PS4="[ \e[32mOK\e[m ] "
ERROR="[ \e[31mERROR\e[m ]"
IP="$1"
if [ -z $IP ]; then
echo -e "$ERROR Please set the "IP" environment variable and try again. It must be between 172.16.42.2 and 172.16.42.254" >&2
exit -1
fi
if [ `sudo cat /etc/wireguard/wg0.conf | grep "$IP"` ]; then
echo -e "$ERROR $IP is already configured." >&2
exit -1
fi
set -xue
PRIVATE_KEY=`wg genkey | sudo tee -a /etc/wireguard/keypairs/client.$IP.key`
PUBLIC_KEY=`echo $PRIVATE_KEY | wg pubkey | sudo tee -a "/etc/wireguard/keypairs/client.$IP.pub"`
cat <<EOF | sudo tee -a /etc/wireguard/wg0.conf > /dev/null
[Peer]
PublicKey=$PUBLIC_KEY
AllowedIPs=$IP
PersistentKeepAlive=25
EOF
cat <<EOF | sudo tee -i /etc/wireguard/client.conf.$IP.sample > /dev/null
[Interface]
PrivateKey=$PRIVATE_KEY
Address=$IP/32
MTU=1365
DNS=1.1.1.1
[Peer]
PublicKey=`sudo cat /etc/wireguard/keypairs/server.pub`
AllowedIPs=0.0.0.0/0
Endpoint=`curl -sL 'https://api.ipify.org?format=json' | jq .ip | sed 's/"//g'`:51820
PersistentKeepAlive=25
EOF
sudo systemctl restart wg-quick@wg0
set +x
echo -e "\e[33m"
sudo cat /etc/wireguard/client.conf.$IP.sample
echo -e "\e[m"
sudo cat /etc/wireguard/client.conf.$IP.sample | qrencode -t ansiutf8