이 저장소에는 TUN 장치를 열고 UDP를 통해 원시 트래픽을 전송하여 지점 간 가상 사설망의 간단한 구현이 포함되어 있습니다. 이 VPN은 두 호스트 사이에 터널을 생성하도록 설계되었습니다.
TUN 트래픽은 암호화되지 않은 UDP 패킷을 통해 두 엔드포인트 간에 그대로 전송됩니다. 따라서 이는 보다 안전한 프로토콜(예: SSH, github.com/dsnet/sshtunnel 참조)이 이 VPN 위에서 실행되는 경우에만 사용해야 합니다. 공격자가 엔드포인트에서 로컬로 바인딩된 다른 소켓에 연결하는 것을 방지하기 위해 IP 트래픽을 지정된 포트로만 제한하는 간단한 포트 필터가 내장되어 있습니다. udptunnel 사용자는 악성 트래픽을 제한하기 위한 보조 조치로 iptable 규칙을 설정해야 합니다.
이는 Linux만 지원합니다.
데몬을 빌드합니다.
go get -u github.com/dsnet/udptunnel
서버 구성 파일을 만듭니다.
{
"TunnelAddress" : "10.0.0.1" ,
"NetworkAddress" : ":8000" ,
"AllowedPorts" : [ 22 ] ,
}
호스트가 비어 있는 NetworkAddress
데몬이 서버 모드에서 작동 중임을 나타냅니다.
클라이언트 구성 파일을 만듭니다.
{
"TunnelAddress" : "10.0.0.2" ,
"NetworkAddress" : "server.example.com:8000" ,
"AllowedPorts" : [ 22 ] ,
}
호스트 server.example.com
클라이언트가 서버에 연결할 수 있는 일부 주소로 확인되는 것으로 가정됩니다.
클라이언트와 서버 모두에서 데몬을 시작합니다( $GOPATH/bin
$PATH
에 있다고 가정).
[email protected] $ udptunnel /path/to/config.json
[email protected] $ udptunnel /path/to/config.json
다른 엔드포인트에 액세스해 보세요(예: 클라이언트에서 서버로).
[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: ...
위의 예는 10.0.0.1
에서 주소 지정이 가능한 서버와 통신을 시도하는 클라이언트를 보여줍니다. 대신 10.0.0.2
에서 클라이언트에 전화를 걸어 서버에서 예제 명령을 수행할 수 있습니다.