Wireguard No Alpine Linux
Rodrigo Mosconi
Uso um host Linux com a distro Alpine Linux, inicialmente para testar containers ou o K3S. Esse host também hospeda outras ferramentas que dependam de espaço. Para uso de alguns recursos, é necessário que os dados se comuniquem por meio de uma VPN, que poderia ser IPSEC/IKE2, mas optou-se pelo wireguard por conta de sua configuração simples, uso de interface virtual, e pelo suporte a múltiplos sistemas operacionais, incluindo Linux, Android, BSDs, Windows, entre outros.
Optou-se por configurar a comunicação de VPN sobre IPv6, e a rede interna será IPv4.
Instalando o wireguard no Alpine linux
sudo apk add wireguard-tools
Configurando wireguard com o ferramentário padrão
Crie um par de chaves (privada e pública)
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Configurando o arquivo /etc/wireguard/wg0.conf para a interface
wg0, usando os valores das chaves criadas anteriormente.
[Interface]
Address = 172.17.0.4/28
ListenPort = 51820
PrivateKey = <chave privada> # conteudo de privatekey previamente gerado
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;iptables -D FORWARD -o %i -j ACCEPT
Para cada host (peer) cadastre entradas:
[Peer]
# Name =
PublicKey = <chave pública do outro host>
Endpoint = <IP ou [IPv6] ou fqdn>:51820
AllowedIPs = 172.17.0.1/32,172.17.1.1/32
Gerenciando como serviço
Cadastrando para iniciar no boot (default):
sudo rc-update add wg-quick.wg0
Para iniciar:
sudo service wg-quick.wg0 start
Verificando:
Usar wg show para exibir status e utilização.
sudo wg show
interface: wg0
public key: <chave pública deste host>
private key: (hidden)
listening port: 51820
peer: <chave pública do primeiro peer>
endpoint: [IPv6]:51820
allowed ips: 172.17.0.1/32, 172.17.1.1/32
latest handshake: 1 minute, 50 seconds ago
transfer: 73.27 KiB received, 99.19 KiB sent
peer: <chave pública do segundo peer>
endpoint: [IPv6]:51820
allowed ips: 172.17.0.5/32, 172.17.1.5/32
Neste exemplo, o primeiro peer está conectado, e o segundo não.