记录一次ShadowSocks服务的简单搭建过程
说明
记录下这次站点搭建本意还是为了给自己做过的事情做个笔记。
ss站点如何搭建,网上的其它地方也有很多很详细的说明,本文也提供不出更多更新的东西了。
只是中间遇到的几个波折很有意思,个人觉得有一点记录下来的价值。
搭建
服务器搭建在vultr的云服务器上,使用的操作系统是Ubuntu 24.04 LTS x64。
搭建服务使用的是秋水逸冰(Teddysun)的一键安装脚本。
1 | wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh |
提示的四种安装选项,选择了Shadowsocks-Python,没有什么特别的原因,只是以前用过SSR,想尝试一下新的东西。
Python安装报错
这是安装中出现的第一个问题。安装失败,出现了如下提示的报错。
[Error] Failed to install python,Please visit: https://teddysun.com/486.html and contact.
原因很简单,操作系统不认识python,只认识python3,安装包也一样,所以要对原本的脚本进行修改。
找到shadowsocks-all.sh这个文件,在文件里找到一个install_dependencies的部分,内容大概是这样的:
1 | install_dependencies(){ |
把里面的python都修改成python3就可以了。
当然,我在这里还额外做了一点事情,我安装了Ubuntu提供的python-is-python3包,为的是减少脚本代码可能出现的错误。
1 | sudo apt install python-is-python3 |
这一切都做好之后,使用上面说到的一键安装脚本里,第三行的那个命令,再执行一次。
安装成功。
运行错误
但安装成功不代表运行就能成功。
服务的脚本位于/etc/init.d/
目录下,我安装的是ss-python,所以可以看到一个shadowsocks-python文件。
这里记录一下不同版本的文件的脚本命令和配置文件。
脚本命令:
1 | Shadowsocks-Python 版: |
默认配置文件:
1 | Shadowsocks-Python 版: |
使用/etc/init.d/shadowsocks-python status
命令后,发现服务处于停止状态。
查看日志,可以看到报错记录信息。发现一个关键报错信息:
Because collections.MutableMapping is deprecated in python3.10, so you have to change the file where it is called to "collections.abc," which is the most current way to import MutableMapping.
出现这样的报错,是因为在较早的版本中,MutableMapping是通过collections导入的,而Python3.3之后,MutableMapping等抽象类基类已经被移动到collections.abc模块中,在Python3.10之后,直接从collections模块导入会被标记为弃用,引发警告,并且以后的Python版本中,collections里是没有MutableMapping的了。
简单来说,就是要改代码。
好在上文的报错信息里,我可以看到报错的文件是哪些,以及这些文件的存放路径。
找到出现问题的代码文件,发现头部的引用是import collections
,于是在开头加入from collections.abc import MutableMapping
。
并且找到文件中使用了collections.MutableMapping
的地方,改成MutableMapping
。
修改好文件之后,执行脚本重新启动命令重启服务,再次查看状态,发现成功启动。
端口开启
服务是启动了,却发现连不上。
使用ping和telnet分别检查,发现能ping通,telnet却打不开我们预先设置的端口。
那应该就是端口的问题了。
使用ufw命令,首先查看端口状态。
1 | sudo ufw status |
发现端口只有22是打开的,那就不奇怪了。
执行以下命令,把<ss-port>
替换成之前配置的服务端口。
1 | sudo ufw allow <ss-port>/tcp |
接下来再次进行测试,本地telnet也能正确打开远程端口了。
再尝试使用客户端连接,成功。
搞定!