Este repositorio contiene una implementación simple de una red privada virtual punto a punto abriendo un dispositivo TUN y transfiriendo tráfico sin procesar a través de UDP. Esta VPN fue diseñada para crear un túnel entre dos hosts:
El tráfico TUN se envía palabra por palabra entre los dos puntos finales a través de paquetes UDP no cifrados. Por lo tanto, esto solo debe usarse si se ejecuta un protocolo más seguro (como SSH; consulte github.com/dsnet/sshtunnel) sobre esta VPN. Para evitar que los atacantes se conecten a otros sockets vinculados localmente en los puntos finales, se incorpora un filtro de puerto simple para restringir el tráfico IP solo a los puertos especificados. Los usuarios de udptunnel también deberían configurar reglas iptable como medida secundaria para restringir el tráfico malicioso.
Esto sólo es compatible con Linux.
Construye el demonio:
go get -u github.com/dsnet/udptunnel
Cree un archivo de configuración del servidor:
{
"TunnelAddress" : "10.0.0.1" ,
"NetworkAddress" : ":8000" ,
"AllowedPorts" : [ 22 ] ,
}
La NetworkAddress
con un host vacío indica que el demonio está funcionando en modo servidor.
Cree un archivo de configuración del cliente:
{
"TunnelAddress" : "10.0.0.2" ,
"NetworkAddress" : "server.example.com:8000" ,
"AllowedPorts" : [ 22 ] ,
}
Se supone que el host server.example.com
se resuelve en alguna dirección donde el cliente pueda acceder al servidor.
Inicie el demonio tanto en el cliente como en el servidor (asumiendo que $GOPATH/bin
está en su $PATH
):
[email protected] $ udptunnel /path/to/config.json
[email protected] $ udptunnel /path/to/config.json
Intente acceder al otro punto final (el ejemplo es de cliente a servidor):
[email protected] $ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=56.7 ms
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=58.7 ms
64 bytes from 10.0.0.1: icmp_req=3 ttl=64 time=50.1 ms
64 bytes from 10.0.0.1: icmp_req=4 ttl=64 time=51.6 ms
[email protected] $ nmap 10.0.0.1
Host is up (0.063s latency).
PORT STATE SERVICE
22/tcp open ssh
[email protected] $ ssh 10.0.0.1
Password: ...
El ejemplo anterior muestra al cliente intentando comunicarse con el servidor, al que se puede acceder en 10.0.0.1
. En su lugar, los comandos de ejemplo se pueden realizar desde el servidor marcando al cliente en 10.0.0.2
.