Этот репозиторий содержит простую реализацию виртуальной частной сети «точка-точка» путем открытия устройства TUN и передачи необработанного трафика через UDP. Этот VPN был разработан для создания туннеля между двумя хостами:
Трафик TUN передается дословно между двумя конечными точками через незашифрованные пакеты UDP. Таким образом, это следует использовать только в том случае, если поверх этой VPN работает более безопасный протокол (например, SSH; см. github.com/dsnet/sshtunnel). Чтобы злоумышленники не могли подключиться к другим локально привязанным сокетам на конечных точках, встроен простой фильтр портов, ограничивающий 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
.