A simple VPN written in Go.
Go to file
2022-12-12 06:46:26 +08:00
app add quic support 2022-12-10 05:11:42 +08:00
certs add default cert 2022-05-17 19:59:44 +08:00
common fix tls default http page & add grpc default http page 2022-12-09 07:00:14 +08:00
grpc add quic support 2022-12-10 05:11:42 +08:00
quic Optimize quic speed 2022-12-12 06:46:26 +08:00
register add comments 2022-06-14 00:14:21 +08:00
scripts support ipv6 gateway 2022-08-27 16:24:59 +08:00
tls Merge pull request #51 from NNdroid/master 2022-12-10 12:52:07 +08:00
tun refactor 2022-11-16 13:39:49 +00:00
udp fix conn cache 2022-11-16 23:57:38 +08:00
ws fix default page 2022-12-09 23:23:44 +08:00
.gitignore ignore idea 2022-08-23 23:08:25 +08:00
.travis.yml code refactor 2022-03-20 21:36:07 +08:00
Dockerfile update dockerfile 2022-04-13 22:25:12 +08:00
go.mod add quic support 2022-12-10 05:11:42 +08:00
go.sum add quic support 2022-12-10 05:11:42 +08:00
LICENSE Add vtun 2020-10-27 22:17:50 +08:00
main.go add quic support 2022-12-10 05:11:42 +08:00
README_CN.md add quic support 2022-12-10 05:11:42 +08:00
README.md add quic support 2022-12-10 05:11:42 +08:00

vtun

A simple VPN written in Go.

EN | 中文

Travis Go Report Card image image image

Features

  • VPN over udp
  • VPN over websocket
  • VPN over tls
  • VPN over grpc
  • VPN over quic

Usage

Usage of ./vtun:
  -S    server mode
  -c string
        tun interface cidr (default "172.16.0.10/24")
  -c6 string
        tun interface ipv6 cidr (default "fced:9999::9999/64")
  -certificate string
        tls certificate file path (default "./certs/server.pem")
  -privatekey string
        tls certificate key file path (default "./certs/server.key")
  -sni string
        tls handshake sni
  -isv
        tls insecure skip verify
  -dn string
        device name
  -g    client global mode
  -k string
        key (default "freedom@2022")
  -l string
        local address (default ":3000")
  -mtu int
        tun mtu (default 1500)
  -obfs
        enable data obfuscation
  -compress
        enable data compression
  -p string
        protocol udp/tls/grpc/quic/ws/wss (default "udp")
  -path string
        websocket path (default "/freedom")
  -s string
        server address (default ":3001")
  -sip string
        server ip (default "172.16.0.1")
  -sip6 string
        server ipv6 (default "fced:9999::1")
  -dip string
        dns server ip (default "8.8.8.8")
  -t int
        dial timeout in seconds (default 30)
  -v    enable verbose output

Build

scripts/build.sh

Client on Linux

sudo ./vtun-linux-amd64 -s server-addr:3001 -c 172.16.0.10/24 -k 123456

Client on Linux with global mode(routing all your traffic to server)

sudo ./vtun-linux-amd64 -s server-addr:3001 -c 172.16.0.10/24 -k 123456 -g

Client on MacOS

sudo ./vtun-darwin-amd64 -s server-addr:3001 -c 172.16.0.10/24 -k 123456 -g -sip 172.16.0.1

Client on Windows

To use it with windows, you will need to download a wintun.dll file in the app directory.
Open powershell as administrator and run cmd:

.\vtun-win-amd64.exe  -s server-addr:3001 -c 172.16.0.10/24 -k 123456 -g -sip 172.16.0.1

Server on Linux

sudo ./vtun-linux-amd64 -S -l :3001 -c 172.16.0.1/24 -k 123456

Iptables setup on Linux

  # Enable ipv4 and ipv6 forward
  vi /etc/sysctl.conf
  net.ipv4.ip_forward = 1
  net.ipv6.conf.all.forwarding=1
  sysctl -p /etc/sysctl.conf
  # Masquerade outgoing traffic
  iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
  # Allow return traffic
  iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  # Forward everything
  iptables -A FORWARD -j ACCEPT

Docker

docker image

Run client

docker run  -d --privileged --restart=always --net=host --name vtun-client \
netbyte/vtun -s server-addr:3001 -c 172.16.0.10/24 -k 123456

Run client with global mode

docker run  -d --privileged --restart=always --net=host --name vtun-client \
netbyte/vtun -s server-addr:3001 -c 172.16.0.10/24 -k 123456 -g

Run server

docker run  -d --privileged --restart=always --net=host --name vtun-server \
netbyte/vtun -S -l :3001 -c 172.16.0.1/24 -k 123456

Mobile client

Android

License

The MIT License (MIT)

Acknowledgments

Thanks JetBrains for providing licenses.

JetBrains Logo (Main) logo.