5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-09-20 04:52:33 +00:00

Merge pull request #311 from neilalexander/sintf

Fix source address selection when sintf specified
This commit is contained in:
Neil Alexander 2019-01-16 14:59:20 +00:00 committed by GitHub
commit 4b6c925cb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -230,7 +230,7 @@ func (iface *tcpInterface) call(saddr string, socksaddr *string, sintf string) {
ief, err := net.InterfaceByName(sintf) ief, err := net.InterfaceByName(sintf)
if err != nil { if err != nil {
return return
} else { }
if ief.Flags&net.FlagUp == 0 { if ief.Flags&net.FlagUp == 0 {
return return
} }
@ -240,25 +240,28 @@ func (iface *tcpInterface) call(saddr string, socksaddr *string, sintf string) {
if err != nil { if err != nil {
return return
} }
for _, addr := range addrs { for addrindex, addr := range addrs {
src, _, err := net.ParseCIDR(addr.String()) src, _, err := net.ParseCIDR(addr.String())
if err != nil { if err != nil {
continue continue
} }
if (src.To4() != nil) == (dst.IP.To4() != nil) && src.IsGlobalUnicast() { if (src.To4() != nil) == (dst.IP.To4() != nil) {
if addrindex == len(addrs)-1 || src.IsGlobalUnicast() {
dialer.LocalAddr = &net.TCPAddr{ dialer.LocalAddr = &net.TCPAddr{
IP: src, IP: src,
Port: 0, Port: 0,
Zone: sintf,
} }
break break
} }
} }
}
if dialer.LocalAddr == nil { if dialer.LocalAddr == nil {
return return
} }
} }
} }
}
conn, err = dialer.Dial("tcp", saddr) conn, err = dialer.Dial("tcp", saddr)
if err != nil { if err != nil {
return return