53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
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)
|
|
}
|