mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-21 14:11:56 +00:00
wgengine/netstack: forward incoming connections to localhost
Updates #707 Updates #504 Signed-off-by: Naman Sood <mail@nsood.in>
This commit is contained in:
parent
b89c757817
commit
da1f8cb2df
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user