package main import ( "fmt" "log" "net" "os" "ben.soroos.net/tsnet-proxy/netforward" "tailscale.com/tsnet" ) var ( host_proto = os.Args[1] hostname = os.Args[2] host_port = os.Args[3] dst_proto = os.Args[4] dst_addr = os.Args[5] ) type Dialer struct{} func (dialer Dialer) Dial() (net.Conn, error) { return net.Dial(dst_proto, dst_addr) } func main() { if !(host_proto != "" && hostname != "" && host_port != "" && dst_proto != "" && dst_addr != "") { fmt.Println("Usage: tsnet-proxy PROTO HOSTNAME PORT DST-PROTO DST") fmt.Println("Where PROTO is one of tcp, udp, unix") fmt.Println("Got: ", host_proto, hostname, host_port, dst_proto, dst_addr) os.Exit(1) } dir, valid := os.LookupEnv("RUNTIME_DIRECTORY") if !valid { log.Fatal("RUNTIME_DIRECTORY must be set") } s := &tsnet.Server{ Hostname: hostname, Dir: dir, } defer s.Close() ln, err := s.Listen(host_proto, fmt.Sprint(":", host_port)) if err != nil { log.Fatal(err) } defer ln.Close() netforward.Forward(Dialer {}, ln) }