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:
[Interface]
Address = 10.100.0.1/24
ListenPort = 1194
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.100.0.2/24
# otro cliente
[Peer]
PublicKey =
AllowedIPs = 10.100.0.2/24
Cliente:
[Interface]
PrivateKey =
Address = 10.100.0.2/32
[Peer]
PublicKey =
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.