【Argo】Windows/Linux开机自启配置简记

发布于 / 信息应用 / 10 条评论

最近遇到一个在Windows上运行FRP的需求,并且要开机自启、无明显感知。结合之前在办公室电脑设置虚拟机自启动的一些操作,在此一并简单做一个记录。


一、内网穿透

端口映射

目前主流的端口映射工具包括frp、rathole、tailscale、zerotier等等。frp基于go语言构建,使用简便且应用广泛。rathole由群友推荐给博主,是基于rust语言构建的,整体使用体验差不多。tailscale据称具有良好的性能优势,对并发性能有需求时可以考虑。zerotier则是基于udp构建的互联,支持打洞和虚拟局域网的构建。

如果你的网络是NAT1,还可以尝试比如Natter这样的工具(点击前往)进行打洞实现向公网暴露本地端口。关于这些工具的具体使用在此就不再赘述了,仅用作简单的推荐。

Argo Tunnel

CloudFlare Argo Tunnel可以作为一个简便、快捷的内网穿透工具,它是通过本地客户端与Argo边缘节点建立隧道从而实现免公网IP接入CloudFlare的网络。支持的协议主要是HTTP、HTTPS这样的WEB协议,同时也能在此基础上承载如websocketgrpc等流量。在客户端的配置中,首先要安装对应版本的客户端:

◉ GitHub:点击前往
◉ 官方文档:点击前往

随后,我们需要按照一般的流程创建一个隧道以获取隧道的配置参数:


到这一步,在Linux上就可以直接使用syetemd引导隧道启动了。但是在Windows上会存在一个问题,使用命令行创建的隧道pemjson文件位于用户目录如C:\Users\luminous\.cloudflared下,当其他用户或以service启动隧道时是获取不到这些信息的。来解决这个问题,就需要按照上一步获取的隧道参数写一个YMAL格式的.yml配置文件。


配置好config.yml后,选择合适的参数启动cloudflared即可。--protocol参数默认为quic,建议使用http2h2mux来避免潜在的qos等问题。--edge-ip-version用于指定使用4(IPv4)或6(IPv6)连接至边缘节点。--region参数目前仍在开发中,当前仅支持使用--region=us指定连入位于美国的边缘节点。

◉ 参数文档:点击前往

使用配置文件启动也有一个很明显的好处,ymljson配合能够向任意客户端提供该隧道的凭证信息。因此,你可以很轻松地在不同的客户端上启动该隧道,而不需要每次更换客户端时都进行删除重建以获取适用于本机的配置参数。


二、开机启动

结合以上的实例,我选择了几个例子来介绍常用的开机自启方法。

Linux Systemd

Linux下博主一般喜欢使用systemd来引导进程的启动,因为不需要特殊的依赖。使用任意编辑器/etc/systemd/system/example.service,将修改好的一下内容添加进去即可。


随后,使用systemctl和service指令即可对进程进行管理:

◉ 重载配置:systemctl daemon-reload
◉ 进程管理:service example start|stop|restart
◉ 设置自启:systemctl enable|disable example

Linux PM2

有些朋友在开发或使用Node.js,守护进程常常会用到pm2管理器,实际上pm2也可守护其他的软件进程。但是如果你没有使用Node.js或对pm2完全没有了解,那还是建议使用systemd来进行进程守护。

Windows StartUp

通过Win+R组合键打开运行窗口,输入shell:Common Startup回车能够打开Windows的启动文件夹。在该文件夹中的脚本、程序或者它们的快捷方式在进入系统时会自动执行一次,这样就实现了开机自启。不过这样启动部分程序会存在一定的问题,比如博主之前一直是在frp的目录下放一个内容为.\frpc.exe -c .\frpc.ini的bat脚本并将其快捷方式放在启动文件夹里,这样的话在进程运行后会弹出cmd的黑框,若关闭该Terminal则程序就停止了。

解决这个问题也并不复杂,可以使用Bat2Exe(点击前往)或Bat to EXE Converter(点击前往)这样的程序将脚本封装为EXE,在其中勾选Hide Console选项即可,启动后程序便会在后台静默运行。

Windows Service

使用Windows Service配置进程推荐winsw这个项目(点击前往)。首先需要为你要启动的程序写一个xml配置文件比如argo.xml,其中id为进程缩写、name为进程名、description为程序描述、executable为执行exe所在位置、arguments为传递的参数。


随后,在release页面下载对应版本的winsw.exe,将其与重命名为与xml配置相同的名称(例如argo.exe)并置于同一个目录中。使用powershell或cmd执行.\argo.exe install|unistall即可加载或删除进程,无需进行额外的配置。

使用Win+R组合键开启运行窗口,键入services.msc回车即可开启服务面板,在其中就可以找到我们刚刚添加的进程了。默认状态下,添加后程序是不会自动开启的,右键该service选择运行即可,程序运行中产生的log都在winsw的目录中。


三、结语

以上就是博主关于内网穿透和Argo的简单总结,关于这块感觉大家使用的方式挺多的,比如python会更倾向于使用supervisor。博主见识有限,没有办法一一总结出来,暂且整理至此,如果以后有新的发现会进行补充。

再次也欢迎大家在评论区分享你的经验,如果文章中存在错误也在评论中指出~


*原创文章,转载请注明出处

转载原创文章请注明,转载自: Luminous' Home » 【Argo】Windows/Linux开机自启配置简记

  1. nps也是go开发的,不过好像报毒。。

  2. cloudflare被ban了吗

    1. @安打包 没完全被ban,不过被干扰的挺严重的
  3. (大脑突然上线)是阿卡贝拉《茉莉花》的曲绘吗

    1. @Denis 对,HAKU白画的官图,很容易找到
      1. @Luminous 感谢!(歪楼抱歉)
  4. 想要Q版的天依AI图片(◦˙▽˙◦)

  5. nssm注册服务挺好用的
    另外我最近实验了用gost 建立tls+socks5隧道来端口转发来穿透效果很好
    tls能过很多很严格的医院学校内网

  6. 博主太厉害了,刚好解决了俺的燃眉之急,赞一个!!!

    1. @狂犬主子 感谢支持~