fix tun device
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user