mirror of
https://github.com/shynome/wgortc.git
synced 2025-09-26 20:21:16 +08:00
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"io"
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
"net/netip"
|
|
|
|
"github.com/lainio/err2/try"
|
|
"github.com/shynome/wgortc"
|
|
"github.com/shynome/wgortc/signaler/lens2"
|
|
"golang.zx2c4.com/wireguard/conn"
|
|
"golang.zx2c4.com/wireguard/device"
|
|
"golang.zx2c4.com/wireguard/tun/netstack"
|
|
)
|
|
|
|
func main() {
|
|
runServer := flag.Bool("server", false, "")
|
|
flag.Parse()
|
|
if *runServer {
|
|
dev := startServer()
|
|
<-dev.Wait()
|
|
// dev.Close()
|
|
return
|
|
} else {
|
|
startClient()
|
|
}
|
|
}
|
|
|
|
var signaler = "https://test:test@signaler.slive.fun"
|
|
var loglevel = device.LogLevelVerbose
|
|
|
|
func startServer() (dev *device.Device) {
|
|
tdev, tnet, err := netstack.CreateNetTUN(
|
|
[]netip.Addr{netip.MustParseAddr("192.168.4.29")},
|
|
[]netip.Addr{netip.MustParseAddr("8.8.8.8"), netip.MustParseAddr("8.8.4.4")},
|
|
1420,
|
|
)
|
|
try.To(err)
|
|
var bind conn.Bind
|
|
wrtcSignaler := lens2.NewSignaler("server", signaler)
|
|
bind = wgortc.NewBind(wrtcSignaler)
|
|
// bind = conn.NewDefaultBind()
|
|
dev = device.NewDevice(tdev, bind, device.NewLogger(loglevel, "server"))
|
|
dev.IpcSet(`private_key=003ed5d73b55806c30de3f8a7bdab38af13539220533055e635690b8b87ad641
|
|
listen_port=0
|
|
public_key=f928d4f6c1b86c12f2562c10b07c555c5c57fd00f59e90c8d8d88767271cbf7c
|
|
allowed_ip=192.168.4.28/32
|
|
`)
|
|
try.To(dev.Up())
|
|
|
|
listener := try.To1(tnet.ListenTCP(&net.TCPAddr{Port: 80}))
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
|
|
log.Printf("> %s - %s - %s", request.RemoteAddr, request.URL.String(), request.UserAgent())
|
|
io.WriteString(writer, "Hello from userspace TCP!")
|
|
})
|
|
go func() {
|
|
try.To(http.Serve(listener, mux))
|
|
}()
|
|
return
|
|
}
|
|
|
|
func startClient() (dev *device.Device, tnet *netstack.Net) {
|
|
tun, tnet, err := netstack.CreateNetTUN(
|
|
[]netip.Addr{netip.MustParseAddr("192.168.4.28")},
|
|
[]netip.Addr{netip.MustParseAddr("8.8.8.8")},
|
|
1420)
|
|
try.To(err)
|
|
wrtcSignaler := lens2.NewSignaler("client", signaler)
|
|
bind := wgortc.NewBind(wrtcSignaler)
|
|
dev = device.NewDevice(tun, bind, device.NewLogger(loglevel, "client"))
|
|
err = dev.IpcSet(`private_key=087ec6e14bbed210e7215cdc73468dfa23f080a1bfb8665b2fd809bd99d28379
|
|
public_key=c4c8e984c5322c8184c72265b92b250fdb63688705f504ba003c88f03393cf28
|
|
allowed_ip=0.0.0.0/0
|
|
endpoint=server
|
|
`)
|
|
try.To(dev.Up())
|
|
|
|
client := http.Client{
|
|
Transport: &http.Transport{
|
|
DialContext: tnet.DialContext,
|
|
},
|
|
}
|
|
resp := try.To1(client.Get("http://192.168.4.29/"))
|
|
body := try.To1(io.ReadAll(resp.Body))
|
|
log.Println(string(body))
|
|
return
|
|
}
|