get free ip fix

This commit is contained in:
Abhishek Kondur
2022-10-28 17:08:50 +05:30
parent 31a7e73473
commit 36e47d8d8d
3 changed files with 36 additions and 10 deletions

View File

@@ -2,11 +2,13 @@ package proxy
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"log" "log"
"net" "net"
"runtime" "runtime"
"strconv" "strconv"
"strings"
"github.com/c-robinson/iplib" "github.com/c-robinson/iplib"
"github.com/gravitl/netmaker/nm-proxy/common" "github.com/gravitl/netmaker/nm-proxy/common"
@@ -102,13 +104,19 @@ func (p *Proxy) Start(remoteConn net.Conn) error {
p.RemoteConn = remoteConn p.RemoteConn = remoteConn
var err error var err error
// err = p.Config.WgInterface.GetWgIface(p.Config.WgInterface.Name)
// if err != nil {
// log.Println("Failed to get iface: ", p.Config.WgInterface.Name, err)
// return err
// }
wgPort, err := p.Config.WgInterface.GetListenPort() wgPort, err := p.Config.WgInterface.GetListenPort()
if err != nil { if err != nil {
log.Printf("Failed to get listen port for iface: %s,Err: %v\n", p.Config.WgInterface.Name, err) log.Printf("Failed to get listen port for iface: %s,Err: %v\n", p.Config.WgInterface.Name, err)
return err return err
} }
addr, err := GetFreeIp("127.0.0.1/8", *wgPort) p.Config.WgInterface.Port = *wgPort
log.Printf("----> WGIFACE: %+v\n", p.Config.WgInterface)
addr, err := GetFreeIp("127.0.0.1/8", p.Config.WgInterface.Port)
if err != nil { if err != nil {
log.Println("Failed to get freeIp: ", err) log.Println("Failed to get freeIp: ", err)
return err return err
@@ -123,10 +131,11 @@ func (p *Proxy) Start(remoteConn net.Conn) error {
Port: common.NmProxyPort, Port: common.NmProxyPort,
}, &net.UDPAddr{ }, &net.UDPAddr{
IP: net.ParseIP(wgAddr), IP: net.ParseIP(wgAddr),
Port: *wgPort, Port: p.Config.WgInterface.Port,
}) })
if err != nil { if err != nil {
log.Fatalf("failed dialing to local Wireguard port,Err: %v\n", err) log.Printf("failed dialing to local Wireguard port,Err: %v\n", err)
return err
} }
log.Printf("Dialing to local Wireguard port %s --> %s\n", p.LocalConn.LocalAddr().String(), p.LocalConn.RemoteAddr().String()) log.Printf("Dialing to local Wireguard port %s --> %s\n", p.LocalConn.LocalAddr().String(), p.LocalConn.RemoteAddr().String())
@@ -143,6 +152,9 @@ func (p *Proxy) Start(remoteConn net.Conn) error {
func GetFreeIp(cidrAddr string, dstPort int) (string, error) { func GetFreeIp(cidrAddr string, dstPort int) (string, error) {
//ensure AddressRange is valid //ensure AddressRange is valid
if dstPort == 0 {
return "", errors.New("dst port should be set")
}
if _, _, err := net.ParseCIDR(cidrAddr); err != nil { if _, _, err := net.ParseCIDR(cidrAddr); err != nil {
log.Println("UniqueAddress encountered an error") log.Println("UniqueAddress encountered an error")
return "", err return "", err
@@ -165,15 +177,21 @@ func GetFreeIp(cidrAddr string, dstPort int) (string, error) {
IP: net.ParseIP("127.0.0.1"), IP: net.ParseIP("127.0.0.1"),
Port: dstPort, Port: dstPort,
}) })
if err != nil {
log.Println("----> GetFreeIP ERR: ", err)
if strings.Contains(err.Error(), "can't assign requested address") {
newAddrs, err = net4.NextIP(newAddrs)
if err != nil {
return "", err
}
} else {
return "", err
}
}
if err == nil { if err == nil {
conn.Close() conn.Close()
return newAddrs.String(), nil return newAddrs.String(), nil
} }
newAddrs, err = net4.NextIP(newAddrs)
if err != nil {
return "", err
}
} }
} }

View File

@@ -64,3 +64,6 @@ func GetHostInfo() (info HostInfo) {
} }
return return
} }
// /tmp/netclient daemon > /tmp/netclient.out 2>&1
// tcpdump -evvvttttni any 'udp port 51820'

View File

@@ -61,7 +61,12 @@ func (w *WGIface) GetWgIface(iface string) error {
if err != nil { if err != nil {
return err return err
} }
wgClient.Device(iface) dev, err := wgClient.Device(iface)
if err != nil {
return err
}
log.Printf("----> DEVICE: %+v\n", dev)
return nil return nil
} }