mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-10-05 08:47:00 +08:00
Linux: add option to persist TUN device
This commit is contained in:
4
main.go
4
main.go
@@ -43,6 +43,7 @@ type CmdArgs struct {
|
||||
TunGw *string
|
||||
TunMask *string
|
||||
TunDNS *string
|
||||
TunPersist *bool
|
||||
LogLevel *string
|
||||
|
||||
// Proxy
|
||||
@@ -74,6 +75,7 @@ func init() {
|
||||
args.TunGw = flag.String("tunGw", "240.0.0.1", "TUN interface gateway")
|
||||
args.TunMask = flag.String("tunMask", "255.255.255.0", "TUN interface netmask")
|
||||
args.TunDNS = flag.String("tunDNS", "8.8.8.8,8.8.4.4", "DNS resolvers for TUN interface (Windows Only)")
|
||||
args.TunPersist = flag.Bool("tunPersist", false, "Persist TUN interface after the program exits or the last open file descriptor is closed (Linux only)")
|
||||
|
||||
// Proxy
|
||||
args.ProxyServer = flag.String("proxyServer", "", "Proxy server address")
|
||||
@@ -128,7 +130,7 @@ func main() {
|
||||
|
||||
// Open the tun device
|
||||
dnsServers := strings.Split(*args.TunDNS, ",")
|
||||
tunDev, err := tun.OpenTunDevice(*args.TunName, *args.TunAddr, *args.TunGw, *args.TunMask, dnsServers)
|
||||
tunDev, err := tun.OpenTunDevice(*args.TunName, *args.TunAddr, *args.TunGw, *args.TunMask, dnsServers, *args.TunPersist)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to open tun device: %v", err)
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@ func isIPv6(ip net.IP) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func OpenTunDevice(name, addr, gw, mask string, dnsServers []string) (io.ReadWriteCloser, error) {
|
||||
func OpenTunDevice(name, addr, gw, mask string, dnsServers []string, persist bool) (io.ReadWriteCloser, error) {
|
||||
_ = dnsServers
|
||||
tunDev, err := water.New(water.Config{
|
||||
DeviceType: water.TUN,
|
||||
|
@@ -8,11 +8,12 @@ import (
|
||||
"github.com/songgao/water"
|
||||
)
|
||||
|
||||
func OpenTunDevice(name, addr, gw, mask string, dnsServers []string) (io.ReadWriteCloser, error) {
|
||||
func OpenTunDevice(name, addr, gw, mask string, dnsServers []string, persist bool) (io.ReadWriteCloser, error) {
|
||||
cfg := water.Config{
|
||||
DeviceType: water.TUN,
|
||||
}
|
||||
cfg.Name = name
|
||||
cfg.Persist = persist
|
||||
tunDev, err := water.New(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@@ -157,7 +157,7 @@ func getTuntapComponentId(ifaceName string) (string, string, error) {
|
||||
return "", "", errors.New("not found component id")
|
||||
}
|
||||
|
||||
func OpenTunDevice(name, addr, gw, mask string, dns []string) (io.ReadWriteCloser, error) {
|
||||
func OpenTunDevice(name, addr, gw, mask string, dns []string, persist bool) (io.ReadWriteCloser, error) {
|
||||
componentId, devName, err := getTuntapComponentId(name)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get component ID: %v", err)
|
||||
|
Reference in New Issue
Block a user