老E的博客

  • 首页
  • 关于
  • 技术应用
    • VPS相关
    • AI相关
    • 盒子相关
    • 其他
  • 订阅Youtube频道
  • 网络加速
    • expressvpnNo.1 ExpressVPN
    • 最佳免费VPN-PrivadoVPN
    • NordVPN
    • 廉价王者-Surfshark
    • PrivateInternetAccess
    • 解锁一切-PrivateVPN
  • 公益资源
    • AI导航
    • 工具下载
    • Docker镜像加速
  • 友情链接
    • tickcloudTickcloud
老E的博客
专注记录并分享跨境技术应用及随想
  1. 首页
  2. 技术应用
  3. VPS相关
  4. 正文

在OpenWRT上部署stunnel搭建Socks5 VPN

2023年10月13日 5515次阅读 4条评论
clawcloud
expressvpn best vpn
privado vpn
surfshark vpn
private vpn
pia vpn
nord vpn

作为一个自由的跨平台软件,Stunnel用于提供全局的TLS/SSL加密服务。针对本身无法进行TLS或SSL通信的客户端及服务器,Stunnel可提供安全的加密连接。该软件可在许多操作系统下运行,包括Unix-like系统,以及Windows。Stunnel基于OpenSSL,严格意义上Stunnel并非一个完整的产品,运行stunnel需要有一个SSL库,典型的就是OpenSSL。

因其全局SSL/TLS加密的特性,且协议上支持应用层之下的socks,所以我们无需添加额外的tun2socks或proxy接驳组件,可直接通过socks over TLS组建socks VPN,在经典的富强应用场景下,若干年来的示例都是错误的,简单的事情复杂化、脱裤子放屁。同时,stunnel也支持PSK身份验证(源自OpenSSL),对于家庭用户和小型企业非常友好,避免了CA/PKI服务的开销以及密钥交换的繁琐管理要求。本文示例采用PSK身份验证方式,有关证书验证方式另文「精悍的工具-Stunnel搭建跨境加密隧道及代理实现」加以分享。

1.VPS上安装Stunnel服务端

首先,使用apt安装stunnel4(安装后stunnel仅仅是stunnel4的软链接)以及检查IP转发和启动设置。

apt install stunnel4 -y 
#apt install stunnel -y #与上一命令等效

#cat /etc/sysctl.conf
#cat /etc/default/stunnel4

具体检查IP转发和启动设置的详细内容参考「前文」,这里不再重复。完成检查后,编辑、修改stunnel配置文件,配置文件中的具体选项可参考另文  「Stunnel配置文件主要选项」。

syslog = no
debug = 3
output = /var/log/stunnel4/st.log

pid = /var/run/stunnel.pid

[tunnelproxy]
accept = <port>
ciphers = PSK
PSKsecrets = /etc/stunnel/psk.ini
protocol = socks
;socket = l:TCP_NODELAY=1
;socket = r:TCP_NODELAY=1
TIMEOUTidle = 3600

上述示例文件中,注释的两行“socket =...”对于普通场景应用意义不大,对游戏应用应该有所帮助和提升,可能增加的网络负载理论上不会造成太大影响。本例中并没有使用connect选项,如果取消注释,使用“socket = l:TCP_NODELAY=1”一行即可,对应地,应将“socket = r:TCP_NODELAY=1”添加至客户端配置文件的服务块中。

配置文件编辑保存后使用systemctl重启stunnel4服务。需要提醒两点:

  • 服务是stunnel4.service,不是stunnel.service,重启后者必定出错;
  • stunnel4.service服务描述文件已自动创建,不要试图再去手动创建。

2.客户端/OpenWRT上安装与配置

2.1 安装

OpenWRT可以通过opkg包管理器直接安装,通过luci的software Web GUI界面,实际也是调用opkg包管理器进行安装。当前安装的stunnel版本为5.62,高于debian/ubuntu安装的版本。

opkg update
opkg install stunnel

在luci界面,软件包搜索stunnel即可安装或移除,stunnel本体不足80k,主要依赖为openssl。

2.2 stunnel客户端配置

安装完成后,init.d启动脚本文件、uci stunnel配置文件、stunnel原生配置文件分别为/etc/init.d/stunnel、/etc/config/stunnel和/etc/stunnel/stunnel.conf,启动脚本文件可以直接运行,不经uci直接加载原生配置文件,使用service命令则由uci接管加载uci stunnel配置文件,创建原生配置文件并启动stunnel。

stunnel启动脚本中定义了配置文件(原生)、pid文件等,如果不适用uci,则原生配置文件中不应再行指定pid文件以及其他启动脚本中已有定义的全局配置。

 

使用uci

stunnel的uci配置文件为/etc/config/stunnel,可参考以下样例文件,与服务端保持一致采用PSK预共享密钥验证方式。

config service 'tunnelproxy'
option enabled '1'
option client '1'

option accept '127.0.0.1:10088'
option connect 'server_ip:port'

option ciphers 'PSK'
option PSKsecrets '/etc/stunnel/psk.ini'

注意将上述“server_ip:port”修改为实际的远程服务端的IP地址和监听端口,编辑完成后保存。无论是否使用uci,都需要在创建psk文件,文件路径和名称和配置文件的PSKsecrets选项指定的保持一致。

完成上述工作后,就可以使用service命令启动或重启stunnel服务。一般情况下,stunnel安装完成后会以initi.d守护进程自动启动,因此建议使用restart参数重启服务。

service stunnel restart

另外,可以在luci界面,通过『系统』菜单,点开『启动项』后,可以对stunnel进行启动、重启、停止以及停用、启用等操作。

不使用uci

stunnel安装过程中会创建默认的/etc/stunnel/stunnel.conf样例文件,与windows下的样例文件内容相同,可直接在最后添加自定义服务块内容,也将其备份并新建。如果备份在同一目录下,建议后缀不使用“.conf”。在OpenWRT的/etc/init.d/下,stunnel的启动脚本文件定义了配置文件。

mv /etc/stunnel/stunnel.conf /etc/stunnel/stunnel.conf.backup
nano /etc/stunnel/stunnel.conf

本文演示的配置文件/etc/stunnel/stunnel.conf内容如下,Ctrl+O保存后Ctrl+X退出。

[tunnelproxy]
client = yes 

accept = 127.0.0.1:10088
connect = server_ip:port

ciphers = PSK
PSKsecrets = /etc/stunnel/psk.ini

;socket = r:TCP_NODELAY=1

在使用uci的情况下,uci会自动生成stunnel原生配置文件,除全局配置和服务配置选项的顺序不同外,服务配置内容上应完全一致。如果启动失败,uci生成的原生配置文件仅有全局配置块,或者于上述手动编辑的配置文件内容不同,说明配置错误。配置完成后,直接运行stunnel即可启动,启动脚本会直接加载/etc/stunnel/stunnel.conf配置文件。

3.终端配置

路由器配置完成后可以使用

Windows下使用Chrome/Edge SwitchyOmega插件,选择socks5协议,代理IP和端口指向路由器地址即可,不再赘述。

对于系统代理的配置,尽管win11取消了协议选择,但仍可强制配置。需要分为两步或直接在注册表新建相应的REG_SZ值,测试重启后不会失效。第一步是是配置代理为“socks=127.0.0.1”,地址、端口可随意填写,配置虽然错误,但系统会新建注册表项,正确的配置反而不会新建注册表项。

点击『保存』后,通过『windows徽标键+R』,输入『regedit』,回车打开注册表编辑器。需要修改的注册表项路径为“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings”,名称为ProxyServer。

双击ProxyServer项打开,修改为正确的代理地址及端口,socks代理应为“socks://ip:port”,保存之后即刻生效。

这样,windows主机就可以不安装任何软件和插件,全局通过stunnel隧道访问互联网。老E认为,如果不是完全访问境外站点或服务,这么做没有必要,但总有人会有这种需求,所以附带略作介绍。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
标签: OpenWRT proxy socks5 stunnel vpn 代理 翻墙
最后更新:2024年5月27日

老E

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • mto

    请教如何设置某些网址代理呢?

    2023年10月25日
    回复
    • 老E

      @mto 分流是吧 某些代理 某些不代理 装ipset就是简化这方面工作的 还没来得及码字说明

      2023年10月27日
      回复
  • Tesoo

    请教大佬!按你的方法服务端和windows客户端可以正常访问,但openwrt始终连接不上。我理解的是配置/etc/config/stunnel成功后service stunnel restart,会自动生成或配置/etc/stunnel/stunnel.conf,但是我无论怎么配置/etc/config/stunnel,/etc/stunnel/stunnel.conf的内容都不会改变

    2024年6月27日
    回复
    • webmaster

      @Tesoo openwrt上改配置用uci 有单独的配置文件 服务重启会用uci配置并覆盖/etc/stunnel下的

      2024年6月27日
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    站内搜索
    归档
    • 2025 年 5 月
    • 2025 年 4 月
    • 2025 年 3 月
    • 2025 年 2 月
    • 2025 年 1 月
    • 2024 年 12 月
    • 2024 年 11 月
    • 2024 年 10 月
    • 2024 年 9 月
    • 2024 年 8 月
    • 2024 年 7 月
    • 2024 年 6 月
    • 2024 年 5 月
    • 2024 年 4 月
    • 2024 年 3 月
    • 2024 年 2 月
    • 2024 年 1 月
    • 2023 年 12 月
    • 2023 年 11 月
    • 2023 年 10 月
    • 2023 年 9 月
    • 2023 年 8 月
    • 2023 年 7 月
    • 2023 年 6 月

    Copyright ©2023-2025 Appscross. All Rights Reserved.