set default tun name
This commit is contained in:
@ -10,12 +10,19 @@ import (
|
||||
tun_util "github.com/go-gost/x/internal/util/tun"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultTunName = "utun"
|
||||
)
|
||||
|
||||
func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.IP, err error) {
|
||||
ip, _, err = net.ParseCIDR(l.md.config.Net)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if l.md.config.Name == "" {
|
||||
l.md.config.Name = defaultTunName
|
||||
}
|
||||
ifce, name, err = l.createTunDevice()
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -4,63 +4,63 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/vishvananda/netlink"
|
||||
|
||||
tun_util "github.com/go-gost/x/internal/util/tun"
|
||||
)
|
||||
|
||||
func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.IP, err error) {
|
||||
ip, _, err = net.ParseCIDR(l.md.config.Net)
|
||||
func (l *tunListener) createTun() (dev io.ReadWriteCloser, name string, ip net.IP, err error) {
|
||||
ip, ipNet, err := net.ParseCIDR(l.md.config.Net)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
ifce, name, err = l.createTunDevice()
|
||||
dev, name, err = l.createTunDevice()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
if err = l.exeCmd(fmt.Sprintf("ip link set dev %s mtu %d", name, l.md.config.MTU)); err != nil {
|
||||
l.logger.Warn(err)
|
||||
}
|
||||
*/
|
||||
|
||||
if err = l.exeCmd(fmt.Sprintf("ip address add %s dev %s", l.md.config.Net, name)); err != nil {
|
||||
l.logger.Warn(err)
|
||||
ifce, err := net.InterfaceByName(name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = l.exeCmd(fmt.Sprintf("ip link set dev %s up", name)); err != nil {
|
||||
l.logger.Warn(err)
|
||||
link, err := netlink.LinkByName(name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = l.addRoutes(name, l.md.config.Routes...); err != nil {
|
||||
if err = netlink.AddrAdd(link, &netlink.Addr{
|
||||
IPNet: &net.IPNet{
|
||||
IP: ip,
|
||||
Mask: ipNet.Mask,
|
||||
},
|
||||
}); err != nil {
|
||||
return
|
||||
}
|
||||
if err = netlink.LinkSetUp(link); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = l.addRoutes(ifce, l.md.config.Routes...); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (l *tunListener) exeCmd(cmd string) error {
|
||||
l.logger.Debug(cmd)
|
||||
|
||||
args := strings.Split(cmd, " ")
|
||||
if err := exec.Command(args[0], args[1:]...).Run(); err != nil {
|
||||
return fmt.Errorf("%s: %v", cmd, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *tunListener) addRoutes(ifName string, routes ...tun_util.Route) error {
|
||||
func (l *tunListener) addRoutes(ifce *net.Interface, routes ...tun_util.Route) error {
|
||||
for _, route := range routes {
|
||||
cmd := fmt.Sprintf("ip route add %s dev %s", route.Net.String(), ifName)
|
||||
l.logger.Debug(cmd)
|
||||
|
||||
args := strings.Split(cmd, " ")
|
||||
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
|
||||
l.logger.Warnf("%s: %v", cmd, er)
|
||||
r := netlink.Route{
|
||||
Dst: &route.Net,
|
||||
Gw: route.Gateway,
|
||||
}
|
||||
if r.Gw == nil {
|
||||
r.LinkIndex = ifce.Index
|
||||
}
|
||||
if err := netlink.RouteReplace(&r); err != nil {
|
||||
return fmt.Errorf("add route %v %v: %v", r.Dst, r.Gw, err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
@ -12,12 +12,19 @@ import (
|
||||
tun_util "github.com/go-gost/x/internal/util/tun"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultTunName = "tun0"
|
||||
)
|
||||
|
||||
func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.IP, err error) {
|
||||
ip, _, err = net.ParseCIDR(l.md.config.Net)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if l.md.config.Name == "" {
|
||||
l.md.config.Name = defaultTunName
|
||||
}
|
||||
ifce, name, err = l.createTunDevice()
|
||||
if err != nil {
|
||||
return
|
||||
|
Reference in New Issue
Block a user