diff options
| author | Naman Sood <mail@nsood.in> | 2021-03-02 15:14:29 -0500 |
|---|---|---|
| committer | Naman Sood <mail@nsood.in> | 2021-03-02 15:19:33 -0500 |
| commit | da1f8cb2df2c8c2e00266aa80e24e4e9a2aed628 (patch) | |
| tree | b4f69e8c3702280adaaa04f95eca401df996227c | |
| parent | b89c757817413d75edb2e687bddde8e94a76a956 (diff) | |
| download | tailscale-naman/netstack-incoming.tar.xz tailscale-naman/netstack-incoming.zip | |
wgengine/netstack: forward incoming connections to localhostnaman/netstack-incoming
Updates #707
Updates #504
Signed-off-by: Naman Sood <mail@nsood.in>
| -rw-r--r-- | wgengine/netstack/netstack.go | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/wgengine/netstack/netstack.go b/wgengine/netstack/netstack.go index 5bf93a8b5..2332dc167 100644 --- a/wgengine/netstack/netstack.go +++ b/wgengine/netstack/netstack.go @@ -322,19 +322,18 @@ func (ns *Impl) acceptTCP(r *tcp.ForwarderRequest) { return } localAddr, err := ep.GetLocalAddress() - ns.logf("[v2] forwarding port %v to 100.101.102.103:80", localAddr.Port) if err != nil { r.Complete(true) return } r.Complete(false) 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() - 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()) defer cancel() waitEntry, notifyCh := waiter.NewChannelEntry(nil) @@ -351,23 +350,26 @@ func (ns *Impl) forwardTCP(client *gonet.TCPConn, wq *waiter.Queue, address stri } cancel() }() - server, err := ns.DialContextTCP(ctx, address) + server, err := ns.DialContextTCP(ctx, net.JoinHostPort("localhost", strconv.Itoa(int(port)))) 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 } defer server.Close() - connClosed := make(chan bool, 2) + connClosed := make(chan error, 2) go func() { - io.Copy(server, client) - connClosed <- true + _, err := io.Copy(server, client) + connClosed <- err }() go func() { - io.Copy(client, server) - connClosed <- true + _, err := io.Copy(client, server) + connClosed <- err }() - <-connClosed - ns.logf("[v2] netstack: forwarder connection to %s closed", address) + err = <-connClosed + 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) { |
