set default tun name

This commit is contained in:
ginuerzh
2022-08-20 21:28:38 +08:00
parent 84b18fbd04
commit d61b1ba1b3
5 changed files with 55 additions and 34 deletions

View File

@ -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

View File

@ -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

View File

@ -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