Dieses Repository enthält eine einfache Implementierung eines virtuellen privaten Punkt-zu-Punkt-Netzwerks durch Öffnen eines TUN-Geräts und Übertragen des Rohdatenverkehrs über UDP. Dieses VPN wurde entwickelt, um einen Tunnel zwischen zwei Hosts zu erstellen:
Der TUN-Verkehr wird über unverschlüsselte UDP-Pakete ad-wörtlich zwischen den beiden Endpunkten gesendet. Daher sollte dies nur verwendet werden, wenn auf diesem VPN ein sichereres Protokoll (wie SSH; siehe github.com/dsnet/sshtunnel) läuft. Um zu verhindern, dass Angreifer eine Verbindung zu anderen lokal gebundenen Sockets an den Endpunkten herstellen, ist ein einfacher Portfilter integriert, der den IP-Verkehr nur auf die angegebenen Ports beschränkt. Benutzer von udptunnel sollten außerdem iptable-Regeln als sekundäre Maßnahme einrichten, um böswilligen Datenverkehr einzuschränken.
Dies unterstützt nur Linux.
Erstellen Sie den Daemon:
go get -u github.com/dsnet/udptunnel
Erstellen Sie eine Serverkonfigurationsdatei:
{
"TunnelAddress" : "10.0.0.1" ,
"NetworkAddress" : ":8000" ,
"AllowedPorts" : [ 22 ] ,
}
Die NetworkAddress
mit einem leeren Host zeigt an, dass der Daemon im Servermodus arbeitet.
Erstellen Sie eine Client-Konfigurationsdatei:
{
"TunnelAddress" : "10.0.0.2" ,
"NetworkAddress" : "server.example.com:8000" ,
"AllowedPorts" : [ 22 ] ,
}
Es wird davon ausgegangen, dass der Host server.example.com
zu einer Adresse aufgelöst wird, über die der Client den Server erreichen kann.
Starten Sie den Daemon sowohl auf dem Client als auch auf dem Server (vorausgesetzt, $GOPATH/bin
befindet sich in Ihrem $PATH
):
[email protected] $ udptunnel /path/to/config.json
[email protected] $ udptunnel /path/to/config.json
Versuchen Sie, auf den anderen Endpunkt zuzugreifen (Beispiel: Client-zu-Server):
[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: ...
Das obige Beispiel zeigt den Client, der versucht, mit dem Server zu kommunizieren, der unter 10.0.0.1
adressierbar ist. Die Beispielbefehle können stattdessen vom Server aus ausgeführt werden, indem der Client unter 10.0.0.2
angewählt wird.