Compare commits

...

1 Commits

Author SHA1 Message Date
Naman Sood da1f8cb2df wgengine/netstack: forward incoming connections to localhost
Updates #707
Updates #504

Signed-off-by: Naman Sood <mail@nsood.in>
2021-03-02 15:19:33 -05:00
1 changed files with 15 additions and 13 deletions

View File

@ -322,19 +322,18 @@ func (ns *Impl) acceptTCP(r *tcp.ForwarderRequest) {
return return
} }
localAddr, err := ep.GetLocalAddress() localAddr, err := ep.GetLocalAddress()
ns.logf("[v2] forwarding port %v to 100.101.102.103:80", localAddr.Port)
if err != nil { if err != nil {
r.Complete(true) r.Complete(true)
return return
} }
r.Complete(false) r.Complete(false)
c := gonet.NewTCPConn(&wq, ep) c := gonet.NewTCPConn(&wq, ep)
go ns.forwardTCP(c, &wq, "100.101.102.103:80") go ns.forwardTCP(c, &wq, localAddr.Port)
} }
func (ns *Impl) forwardTCP(client *gonet.TCPConn, wq *waiter.Queue, address string) { func (ns *Impl) forwardTCP(client *gonet.TCPConn, wq *waiter.Queue, port uint16) {
defer client.Close() defer client.Close()
ns.logf("[v2] netstack: forwarding to address %s", address) ns.logf("[v2] netstack: forwarding incoming connection on port %v", port)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
waitEntry, notifyCh := waiter.NewChannelEntry(nil) waitEntry, notifyCh := waiter.NewChannelEntry(nil)
@ -351,23 +350,26 @@ func (ns *Impl) forwardTCP(client *gonet.TCPConn, wq *waiter.Queue, address stri
} }
cancel() cancel()
}() }()
server, err := ns.DialContextTCP(ctx, address) server, err := ns.DialContextTCP(ctx, net.JoinHostPort("localhost", strconv.Itoa(int(port))))
if err != nil { if err != nil {
ns.logf("netstack: could not connect to server %s: %s", address, err) ns.logf("netstack: could not connect to local server on port %v: %v", port, err)
return return
} }
defer server.Close() defer server.Close()
connClosed := make(chan bool, 2) connClosed := make(chan error, 2)
go func() { go func() {
io.Copy(server, client) _, err := io.Copy(server, client)
connClosed <- true connClosed <- err
}() }()
go func() { go func() {
io.Copy(client, server) _, err := io.Copy(client, server)
connClosed <- true connClosed <- err
}() }()
<-connClosed err = <-connClosed
ns.logf("[v2] netstack: forwarder connection to %s closed", address) if err != nil {
ns.logf("proxy connection closed with error: %v", err)
}
ns.logf("[v2] netstack: forwarder connection on port %v closed", port)
} }
func (ns *Impl) acceptUDP(r *udp.ForwarderRequest) { func (ns *Impl) acceptUDP(r *udp.ForwarderRequest) {