fix tun device

This commit is contained in:
ginuerzh
2025-07-23 22:44:02 +08:00
parent acae52ab89
commit 281295d02f
13 changed files with 161 additions and 82 deletions
+2 -2
View File
@@ -30,7 +30,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
if len(l.md.config.Net) > 0 {
cmd := fmt.Sprintf("ifconfig %s inet %s %s mtu %d up",
name, l.md.config.Net[0].String(), l.md.config.Peer, l.md.config.MTU)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if err = exec.Command(args[0], args[1:]...).Run(); err != nil {
return
@@ -48,7 +48,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
func (l *tunListener) addRoutes(ifName string) error {
for _, route := range l.routes {
cmd := fmt.Sprintf("route add -net %s -interface %s", route.Net.String(), ifName)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if err := exec.Command(args[0], args[1:]...).Run(); err != nil {
return err
+2 -2
View File
@@ -28,7 +28,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
if len(l.md.config.Net) > 0 {
cmd := fmt.Sprintf("ifconfig %s inet %s mtu %d up",
name, l.md.config.Net[0].String(), l.md.config.MTU)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
@@ -48,7 +48,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
func (l *tunListener) addRoutes(ifName string) error {
for _, route := range l.routes {
cmd := fmt.Sprintf("route add -net %s -interface %s", route.Net.String(), ifName)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)
+4 -4
View File
@@ -28,7 +28,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
cmd := fmt.Sprintf("netsh interface ip set address name=%s "+
"source=static addr=%s mask=%s gateway=none",
name, ipNet.IP.String(), ipMask(ipNet.Mask))
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
@@ -44,7 +44,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
for _, dns := range l.md.config.DNS {
cmd := fmt.Sprintf("netsh interface ip add dnsservers name=%s address=%s validate=no", name, dns.String())
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
@@ -65,7 +65,7 @@ func (l *tunListener) addRoutes(ifName string, gw net.IP) error {
if gw != nil {
cmd += " nexthop=" + gw.String()
}
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)
@@ -77,7 +77,7 @@ func (l *tunListener) addRoutes(ifName string, gw net.IP) error {
func (l *tunListener) deleteRoute(ifName string, route string) error {
cmd := fmt.Sprintf("netsh interface ip delete route prefix=%s interface=%s store=active",
route, ifName)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
return exec.Command(args[0], args[1:]...).Run()
}
+19
View File
@@ -6,6 +6,8 @@ import (
"io"
"net"
"time"
mdata "github.com/go-gost/core/metadata"
)
type conn struct {
@@ -49,3 +51,20 @@ func (c *conn) Close() (err error) {
}
return c.ifce.Close()
}
type metadataConn struct {
net.Conn
md mdata.Metadata
}
// Metadata implements metadata.Metadatable interface.
func (c *metadataConn) Metadata() mdata.Metadata {
return c.md
}
func withMetadata(md mdata.Metadata, c net.Conn) net.Conn {
return &metadataConn{
Conn: c,
md: md,
}
}
+4
View File
@@ -12,6 +12,7 @@ import (
"github.com/go-gost/core/router"
traffic_limiter "github.com/go-gost/x/limiter/traffic"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
mdx "github.com/go-gost/x/metadata"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -95,6 +96,9 @@ func (l *tunListener) listenLoop() {
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(c.LocalAddr().Network()),
)
c = withMetadata(mdx.NewMetadata(map[string]any{
"config": l.md.config,
}), c)
l.cqueue <- c
return nil
+2 -2
View File
@@ -30,7 +30,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
if len(l.md.config.Net) > 0 {
cmd := fmt.Sprintf("ifconfig %s inet %s %s mtu %d up",
name, l.md.config.Net[0].String(), l.md.config.Peer, l.md.config.MTU)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if err = exec.Command(args[0], args[1:]...).Run(); err != nil {
return
@@ -48,7 +48,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
func (l *tunListener) addRoutes(ifName string) error {
for _, route := range l.routes {
cmd := fmt.Sprintf("route add -net %s -interface %s", route.Net.String(), ifName)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if err := exec.Command(args[0], args[1:]...).Run(); err != nil {
return err
+2 -2
View File
@@ -28,7 +28,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
if len(l.md.config.Net) > 0 {
cmd := fmt.Sprintf("ifconfig %s inet %s mtu %d up",
name, l.md.config.Net[0].String(), l.md.config.MTU)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
@@ -48,7 +48,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
func (l *tunListener) addRoutes(ifName string) error {
for _, route := range l.routes {
cmd := fmt.Sprintf("route add -net %s -interface %s", route.Net.String(), ifName)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)
+4 -4
View File
@@ -28,7 +28,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
cmd := fmt.Sprintf("netsh interface ip set address name=%s "+
"source=static addr=%s mask=%s gateway=none",
name, ipNet.IP.String(), ipMask(ipNet.Mask))
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
@@ -44,7 +44,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
for _, dns := range l.md.config.DNS {
cmd := fmt.Sprintf("netsh interface ip add dnsservers name=%s address=%s validate=no", name, dns.String())
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
@@ -65,7 +65,7 @@ func (l *tunListener) addRoutes(ifName string, gw net.IP) error {
if gw != nil {
cmd += " nexthop=" + gw.String()
}
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)
@@ -77,7 +77,7 @@ func (l *tunListener) addRoutes(ifName string, gw net.IP) error {
func (l *tunListener) deleteRoute(ifName string, route string) error {
cmd := fmt.Sprintf("netsh interface ip delete route prefix=%s interface=%s store=active",
route, ifName)
l.logger.Debug(cmd)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
return exec.Command(args[0], args[1:]...).Run()
}