Ni me voy a molestar en explicar wireguard. He configurado tantas de estas que estoy hasta los cojones. Aquí escupo los comandos necesarios:
wg genkey | tee privatekey | wg pubkey > publickey
se debe ejecutar en el servidor y en todos los clientes
esto genera el archivo privatekey y public key
esto es el archivo de configuracion (/etc/wireguard/wgn.conf o /usr/local/etc/wireguard/wgn.conf en freebsd)
Servidor:
- wg0.conf
[Interface] Address = 10.100.0.1/24 ListenPort = 1194 PrivateKey = <PRIVATEKEY DEL SERVER> [Peer] PublicKey = <PUBLIC KEY DEL CLIENTE> AllowedIPs = 10.100.0.2/24 # otro cliente [Peer] PublicKey = <PUBLIC KEY DEL CLIENTE> AllowedIPs = 10.100.0.2/24
Cliente:
- wg0.conf
[Interface] PrivateKey = <TU PRIVATEKEY DEL CLIENTE> Address = 10.100.0.2/32 [Peer] PublicKey = <PUBLIC KEY DEL SERVER> AllowedIPs = 10.100.0.0/24 Endpoint = example.org:51820 PersistentKeepalive = 30
crear vlan con wireguard
Estar conectado a una red por wireguard es lo mismo que estar conectada por cable. Es un cable virtual realmente. Sabiendo esto, puedes usar un cliente de wireguard como router para acceder a la VPN sin tener que añadir clientes, sino sencillamente enrutar el tráfico por una VLAN:
creas una vlan en un cliente que esté conectado a la red de wireguard:
ifconfig vlan create ifconfig vlan0 vlan 100 vlandev bge0 inet 10.100.0.128/25
Con eso, el cliente de wireguard (que tendría que estar en tu misma red física) tendrá la dirección IP 10.100.0.128 en la vlan 100. Tendrás que crear otra vlan en el cliente.
ifconfig vlan create ifconfig vlan0 vlan 100 vlandev em0 inet 10.100.0.129/25
Pruebas a hacerle ping al router a través de la vlan:
PING 10.100.0.128 (10.100.0.128) 56(84) bytes of data. 64 bytes from 10.100.0.128: icmp_seq=1 ttl=64 time=0.031 ms --- 10.100.0.128 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.031/0.031/0.031/0.000 ms
Si funciona, puedes añadir la ruta:
route add 10.100.0.0/24 10.100.0.128
Y si tienes mas clientes en la VPN pero no en tu red física, deberían responder al ping (en mi caso, están en otro rango):
~ [qmdx] % ping 10.69.0.131 PING 10.69.0.131 (10.69.0.131) 56(84) bytes of data. 64 bytes from 10.69.0.131: icmp_seq=1 ttl=62 time=16.5 ms 64 bytes from 10.69.0.131: icmp_seq=2 ttl=62 time=15.6 ms --- 10.69.0.131 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 15.558/16.016/16.475/0.458 ms
Podemos usar traceroute para ver lo que está haciendo:
~ [qmdx] % traceroute 10.69.0.131 traceroute to 10.69.0.131 (10.69.0.131), 30 hops max, 60 byte packets 1 10.100.0.129 (10.100.0.129) 0.635 ms 0.505 ms 0.442 ms 2 10.100.0.2 (10.100.0.2) 19.422 ms 19.365 ms 19.317 ms 3 10.69.0.131 (10.69.0.131) 19.270 ms 19.306 ms 19.252 ms
También puedes tener un servidor DHCP en la VLAN para que asigne IPs dentro del rango de wireguard, darles una ruta estática por DHCP y que se enruten automáticamente a la VPN cuando se conectan a la VLAN.