Files
tsnet-proxy/main.go
2023-11-29 15:41:06 +00:00

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)
}