Skip to content

Conversation

Jackarain
Copy link
Contributor

用于在 tun 设备创建后,执行一个自定义的脚本,比如

tun2socks -device tun3 -proxy socks5://127.0.0.1:1080 -postup "/bin/sh /root/proxy/route.sh"

route.sh 内容如:

# 配置 tun3 的 IP
ip addr add 172.16.8.1/24 dev tun3
ip link set dev tun3 up

# 添加代理服务地址直接通过 pppoe-WAN 路由
route add -host xxx.xxx.xxx.xxx dev pppoe-WAN

# 一些需要通过 tun3 代理的 ip 段...
route add -net 103.235.0.0/16 gw 172.16.8.1
route add -net 117.168.0.0/16 gw 172.16.8.1
route add -net 117.18.0.0/16 gw 172.16.8.1
route add -net 149.154.0.0/16 gw 172.16.8.1
route add -net 185.199.0.0/16 gw 172.16.8.1

有了 postup 这个参数,这样用便于做一些 tun 创建之后相关的自己的脚本设定。

@xjasonlyu
Copy link
Owner

Hi!这个想法我之前有过,不过后来觉得直接集成在里面不够优雅,因为完全可以通过在外部调用解决。

@Jackarain
Copy link
Contributor Author

是的,外部调用虽然也可以做到。但是拆分成外部调用,会和通过 tun2socks 来调用,这2者用法有很大区别,由其是把 tun2socks 做成系统服务的时候,如果没有这个参数,事情就会变得相对复杂很多。
另外,这可以给人多一个选择,具体用法还取决于用户自己的需求,同样依然可以继续通过外部调用来完成。

@xjasonlyu
Copy link
Owner

系统服务,例如systemd,可以用ExecStartPost处理,反而更加符合设计原理。

@Jackarain
Copy link
Contributor Author

比如像 sysvinit 并没有像 systemd 的 ExecStartPost 这种功能,还比如 windows 的服务。
当遇到这种情况的时候,只能使用一个专门的壳程序来启动 tun2socks 及 script 并管理进程,像这种结构并不优雅。

@xjasonlyu
Copy link
Owner

嗯确实有一些道理。不过既然这样的话,应该也提供一个类似于ExecStartPre的参数。另外需要注意下代码中的一些规范问题,例如日志应该用专门的log模块打印,而不是fmt.Printlnprepost 两个功能最好通过不同的func来分开处理等。

@Jackarain
Copy link
Contributor Author

谢谢你接受了我的提议,并给出代码上的建议。
后面我会按你的建议重新做修改,命名我将参考 WireGuard 中类似的功能命名为: PreUPPostUP,如果你没有意见的话。

@xjasonlyu
Copy link
Owner

可以,我觉得这个命名不错!

@Jackarain
Copy link
Contributor Author

Ok,已经完成,有空帮忙 Review

谢谢

@xjasonlyu
Copy link
Owner

@Jackarain 看看还有一些changes,改完应该就可以merge了

@xjasonlyu xjasonlyu merged commit 007c97f into xjasonlyu:main Mar 27, 2023
@xjasonlyu
Copy link
Owner

Merged!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants