自建shadowsocks基础知识

自建shadowsocks基础知识

自建shadowsocks基础知识

目录

  • 前言
  • VPS
  • Linux和命令行
    • 什么是Linux?
    • Shell
    • SSH
      • 认证方式
      • 端口更改
  • 实例讲解
    • Shadowsocks-libev的例子
      • 安装流程
        • Ubuntu 16.10 or higher
        • Ubuntu 14.04 and 16.04
      • 使用方法
    • 其它一些细节问题
      • 复杂?简单?
      • 一键安装脚本
  • 尾声

前言

Shadowsocks(以下简称ss)或 shadowsocksr 是目前最为主流的翻墙代理协议。使用人数之多,足以撑起商业化的发展,看看网上铺天盖地的机场(ss提供商)就知道了。

不过,机场的问题还是很多的,比如安全问题、机场被ddos的问题、小机场速度稳定性问题、同IP下大量使用者产生的连坐问题等等。因此,相对于购买机场现成服务,很多人还是喜欢自建。

然后,问题就来了。墙外中文圈绝不缺教程,Google 上随便一搜,自建ss的教程一抓一大把。但对于在此之前毫无相关经验和理论知识的小白来说,依葫芦画瓢地照着这些教程做往往会遇到各种各样的问题,比如软件依赖缺失、防火墙设定错误、指令报错等等,更糟糕的事,小白们遇到这些问题之后往往也没有办法解决。这种感受本人深有体会,因为我自己也是这么来的,很理解非伸手党小白的不易。

因此,本文的目的就是讲述一些自建ss前需要知道的一些理论背景知识。当然,需要注意的是,这篇文章不会涉及具体的ss搭建流程,也不会一个一个来说搭建过程中可能遇到的问题,它的目的是:1、帮助你理解你在ss搭建教程上看到的那些指令的意思,让你不是纯粹地复制黏贴代码而知其然不知其所以然;2、普及服务器、Linux 相关的一些基本知识,让你遇到问题不至于干瞪眼,而能有针对性地在 Google 上搜索解决办法。

VPS(Virtual private server,虚拟专用服务器)

一般而言,一个相对完整的ss搭建教程,第一件事应该就是教你选择和购买vps,原来推荐的比较多的是 bandwagon,现在说的比较多的应该是 vultr 和 digital ocean,参考网上的各种教程,相信大家都能搞得定。这里我重点介绍下如何理解vps。

我在之前写的文章“浅谈vpn、vps、Proxy以及shadowsocks之间的联系和区别”里提到过这样一段话:

大家不妨想一个问题:我们平时上网浏览网页,我们访问的那些网页都是哪来的?答案很简单,从另一台电脑上下载下来的。无论是用户平时所使用的个人pc,还是用于搭载网站的服务器,本质上都是电脑。但与个人pc不同,被用作服务器的电脑必须做到24小时开机在线,以确保能在任何时候回应用户的请求。而vps,就是不会关机的电脑。

VPS(Virtual private server,虚拟专用服务器)是由vps提供商维护,租用给站长使用的“不会关机的电脑”。vps不是一台台独立的电脑,而是将一台巨型服务器通过虚拟化技术分割成若干台看似独立的服务器。这台巨型服务器不间断运行,被分割出来的小服务器也跟着不停的运作,站长租用其中一台小服务器,搭载上自己的站点,就可以等着用户访问了。

那么,个人电脑能不能做服务器呢?当然可以!我上面说,“与个人pc不同,被用作服务器的电脑必须做到24小时开机在线,以确保能在任何时候回应用户的请求。”这句话反过来看,如果个人pc能做到24小时在线,它同样也可以用作服务器。事实上,有不少个人网站就是搭载在家中闲置的电脑上的。同时,还有人选择用树莓派、个人NAS建站。但是,由于大陆的ISP运营商面向普通网民提供的是动态ip,绑定域名很不方便,再加上宽带上网上下行网速不对等、网络稳定性不高等问题,大部分人还是选择使用vps建站。(除此之外,前一段时间,政府下达了新政令,要求运营商封禁个人宽带网络的443端口和80端口,至此,个人pc建站几无可能)。

可见,vps本质上就是电脑。但同样是电脑,vps和家用电脑有很大区别。其中,最为主要的就是操作系统的不同和交互方式的不同。家用电脑的操作系统一般是Windows和macOS,而vps使用的则是Linux。

Linux和命令行

什么是Linux?

先来说操作系统,目前市面上主流的操作系统主要有三种:macOS、Windows和Linux。MacOS和Windows 大家都很熟悉,此处不在赘述。而Linux则是本文章的主角。Linux不是具体指某个操作系统,而是一类基于linux内核开发的操作系统的总称,旗下有诸多不同的发行本。主流的发行本有Ubuntu、Debain、centOS等等。

操作系统根据功能,又可简单地分为桌面系统和服务器系统。桌面系统就是我们台机或笔记本上安装的系统,而服务器系统,顾名思义,就是专为服务器开发的操作系统。

这里有一点要说明,上面的内容可能给人一种macOS、Windows就是桌面系统,而Linux就是服务器系统的感觉。但事实上,几乎每一种操作系统都有桌面系统和服务器系统两个版本。以Windows 10为例,win10 既有桌面版的win10 home、win10 pro,又有服务器版的win10 server。而Linux同样有桌面版的系统。如果想尝试下的话,这里推荐下Ubuntu的桌面版,在所有Linux发行本的桌面版里,算是比较成熟的一款了。同时,openSUSE也推荐下,桌面主题特别漂亮。

服务器系统和桌面系统并无本质区别,特别是内核层面,两套系统用的完全是同一个内核。区别主要在预安装的操作程序上。

控制上,服务器系统虽然可以使用VNC等协议通过远程桌面实现服务器端的图形化控制,但实现起来比较麻烦,而且还相当占用系统资源(服务器的系统资源很珍贵)。因此,服务器系统一般是使用命令行指令控制,具体到Linux上,就是一种叫做shell的东西。

Shell

命令行操控与图形化控制最大的不同在于,命令行是通过纯文本的指令控制程序。大家回忆下,平时在自己电脑上怎么打开软件程序的?以QQ为例,很简单,双击QQ的图标就好了。而在服务器版的Linux(没有图形界面)上则需要在命令行界面上输入qq这一字符串并敲击回车键打开Linux版的QQ。

那么,命令行的奥秘是什么呢?它是如何做到仅靠一行文本信息就准确地完成你希望它做的事呢?

具体到Linux上,它是靠一个叫做“shell”的程序完成的。shell和QQ、word、shadowsocks一样,都只是一个操作程序。shell的作用是,解读你输入的命令行的意义,并将这些含义传递给其它程序或操作系统的内核以完成相应工作。

比如,你想知道系统内目前所有运行着的所有进程,你可以输入ps -A1,它的意思是告诉内核“请打开ps这个程序,并告诉它运行时要遵循参数A的要求”。然后,内核就会找到ps这个程序,并将它复制到内存当中运行它。这和你平时直接在电脑上双击程序本体(或快捷方式)打开程序并无本质区别。

现在大家知道在自建ss是那一行行复制上去的都是什么东西了吧。

SSH

不像自己手边的电脑,打开就可操作,服务器远在天边,所以很难使用图形化控制2,这点很好理解。但即便是纯文本形式的命令行也不可能自己就从本地电脑飞进服务器,在此之前,必须要通过互联网与服务器进行网络连接,保证数据的正常传输。

SSH就是为此诞生的。

说到ssh,就不得不先提一下它的前辈Telnet。Telnet和SSH一样,都是用于远程连接服务器的,不同的是,Telnet明文传输信息,安全性极低。而SSH不同,传输加密,安全性更高。

认证方式

SSH有两种认证方式,一种是密码认证,一种是key认证。

密码认证很好理解,当你输入ssh root@you_ip_adress后,界面就会提示你输入密码,没什么可说的。

但是,key认证就要复杂很多了。Key本质上是个密钥对,分为一个公钥(public key)和一个私钥(private key)。使用公钥加密的数据只有私钥可以解密。公钥存储在服务器里,私钥在你自己手里。每一次你请求访问控制服务器时,服务器会使用公钥加密一段数据,如果你可以通过手里的私钥成功解密这段数据的话,则认证成功,进行接下来的数据传输,否则,认证失败,断开连接。

使用key认证需要在本地生成一对密钥对,并将公钥上传到服务器。有些VPS服务商(比如阿里云)也提供在线生成密钥对,并让你把私钥下载到本地。

Key认证虽然复杂,但要比密码认证安全很多。密码认证理论上可以通过暴力破解打破,但key认证几乎无解。当然,只要你的密码设置的够长够随机,并使用软件限制同一ip的异常登陆次数的话,一般问题也不大。

端口更改

有些教程为了你的服务器的安全着想,会让你更改SSH的服务端口,这是什么意思呢?

想必大家对ip地址这个概念都不陌生,ip让我们在互联网的茫茫海洋中具体定位到某一台电脑(服务器),而端口的作用则是帮助我们定位到某一个软件。一般而言,一台电脑(服务器)上,正在「联网」工作的程序往往不只一个,当你的数据到达服务器时,服务器如何得知你的数据是发给哪一个程序呢?答案就是端口。当我们开启一个需要联网的程序时,电脑会为其分配一个端口。这个分配的端口可以由操作系统随机分配,也可以由程序自行要求。如果是程序自行要求,且要求的端口已被占用的话,程序就会报错。3

对于常用的网络服务,往往由约定俗称的默认端口。比如我们接触最多的HTTP协议和HTTPS协议,它们的默认端口分别是80和443。当我们在浏览器里的地址栏里输入https://www.google.com时,其实我们输入的URL并不完全,完整的是https://www.google.com:443,多出来的:443就是告诉浏览器要访问目标服务器的443端口。但由于443是默认端口,浏览器知道,所以你不加,浏览器也会自动把它加上去。

SSH的默认端口是22,如果我们不在服务端更改端口,那么服务器上的SSH服务端会默认打开22端口作为监听端口等待用户的访问请求。同样,如果我们连接服务器时,不在个人电脑上指定一个其它的端口的话,SSH客户端就会默认将数据送往目标服务器的22端口。

但默认端口毕竟只是一个约定俗成的规矩,规定的存在可以方便你我他,但既然不是强制的,就可以根据需求更改。比如HTTP(S)协议,你可以强行更改端口,不使用80/443。但网页是给别人访问的,别人不知道你改了端口,浏览器更不知道,所以,你改了端口网站就没人访问了……而SSH不同,它是为服务器管理员一个人服务的,你改了自己当然知道,所以可以改。服务端SSH修改监听端口比较麻烦,需要更改配置文件。但客户端SSH更改访问端口就很简单了,只需在原指令后加参数-p就行了。比如,你要将访问端口改为666,则指令为ssh root@your_ip_adress -p 666

这里给大家讲一个小故事。我之前曾在网上看到过一篇ss建站教程,里面连接SSH的指令是这样的,ssh root@your_ip_adress -p 22。很明显,那位作者对SSH其实是一知半解的。我们现在都明白了,22是SSH的默认端口,程序会自动加上去,单独再指定一次毫无意义。

提倡更改SSH端口的教程认为此举能够提高服务器的安全性,这是有一定的道理的。因为一个骇客如果想通过SSH操控你的服务器,他首先就会测试攻击的22端口。但是,更改SSH端口所能提高的安全性其实非常有限。因为很少有人会直接盯着互联网上各台主机的22端口死扫,一般都会全盘扫描主机的所有端口,并列出所有开放端口,然后通过主动探测检测出端口后确切的服务,再根据具体情况实行下一步操作。所以,改个端口意义不大,别人照样还是能找到真实的SSH服务端口进行攻击,反倒是自己被搞得很麻烦。如果你真的想提高安全性,最应该做的还是尽量使用key认证,即使一定要用密码认证,也一定要使用无规律的强密码。除此之外,“做好端口管理,切勿留洞”则更为关键,你应该使用防火墙阻断你所有不使用的端口,开放在互联网上的永远只该有你需要的用的。

实例讲解

Shadowsocks-libev的例子

理论说得再多不讲点示例还是会觉得模糊,我们这里以shadowsocks-libev的搭建教程为例,大致讲解一下。

Shadowsocks-libev是shadowsocks的一个由C语言实现版本,是目前技术跟进最快的版本。4

大家自建ss时选用的教程想必都是网上搜到的第三方教程,这些教程的特点是相对通俗易懂,但很容易过时。其实,各大shadowsocks的开发者在其项目官网(这里所谓的官网大部分其实就是托管其代码的GitHub上的项目页面)上都有自己的官方软件安装使用教程,学习能力强的的朋友我推荐直接阅读官网上的教程。当然,如果你真的是百分百纯新手,还是第三方的更为友好。5

我这里选用的就是shadowsocka-libev的官方教程。教程上对shadowsocks-libev软件在不同平台(Debian、Ubuntu、Fedora、FreeBSD甚至OpenWrt等等)使用不同方法(包管理软件安装和源码编译安装)的安装流程(以及使用方法)都有十分翔实的说明。

这么多内容我们不可能全讲一遍,这里我们选用在Ubuntu(这是我常用的Linux发行本)上使用包管理软件的方式安装。这是最简单的一种方式了。

我先将整个教程里所有我们需要的部分一次性摘录下来,大家先浏览下,有个大概印象。

# 安装流程

# Ubuntu 16.10 or higher
sudo apt update
sudo apt install shadowsocks-libev

# Ubuntu 14.04 and 16.04
sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
sudo apt-get update
sudo apt install shadowsocks-libev
#使用方法
ss-[local|redir|server|tunnel|manager]

   -s <server_host>           Host name or IP address of your remote server.

   -p <server_port>           Port number of your remote server.

   -l <local_port>            Port number of your local server.

   -k <password>              Password of your remote server.

   -m <encrypt_method>        Encrypt method: rc4-md5, 
         aes-128-gcm, aes-192-gcm, aes-256-gcm,
         aes-128-cfb, aes-192-cfb, aes-256-cfb,
         aes-128-ctr, aes-192-ctr, aes-256-ctr,
         camellia-128-cfb, camellia-192-cfb,
         camellia-256-cfb, bf-cfb,
         chacha20-ietf-poly1305,
         xchacha20-ietf-poly1305,
         salsa20, chacha20 and chacha20-ietf.
         The default cipher is chacha20-ietf-poly1305.

   [-a <user>]                Run as another user.
   
   [-f <pid_file>]            The file path to store pid.

   [-t <timeout>]             Socket timeout in seconds.

   [-c <config_file>]         The path to config file.
   
   [-n <number>]              Max number of open files.

   [-i <interface>]           Network interface to bind.
         (not available in redir mode)

   [-b <local_address>]       Local address to bind.

   [-u]                       Enable UDP relay.
         (TPROXY is required in redir mode)

  [-U]                       Enable UDP relay and disable TCP relay.
         (not available in local mode)

   [-L <addr>:<port>]         Destination server address and port
         for local port forwarding.
         (only available in tunnel mode)

   [-6]                       Resovle hostname to IPv6 address first.

   [-d <addr>]                Name servers for internal DNS resolver.
         (only available in server mode)
   
   [--reuse-port]             Enable port reuse.
   
   [--fast-open]              Enable TCP fast open.
         with Linux kernel > 3.7.0.
         (only available in local and server mode)

   [--acl <acl_file>]         Path to ACL (Access Control List).
         (only available in local and server mode)
   
   [--manager-address <addr>] UNIX domain socket address.
         (only available in server and manager mode)

   [--mtu <MTU>]              MTU of your network interface.
   
   [--mptcp]                  Enable Multipath TCP on MPTCP Kernel.
   
   [--no-delay]               Enable TCP_NODELAY.

   [--executable <path>]      Path to the executable of ss-server.
         (only available in manager mode)
   
   [--key <key_in_base64>]    Key of your remote server.
   
   [--plugin <name>]          Enable SIP003 plugin. (Experimental)
   
   [--plugin-opts <options>]  Set SIP003 plugin options. (Experimental)

   [-v]                       Verbose mode.

看到这里,可能已经有朋友坐不住了。说好的很复杂呢?完全感觉不到啊。就这几行东西能叫复杂?还不如自己找的第三方教程呢。不急,我一会儿会说这个问题,我们先来看看这几行都是什么意思。

安装流程

先看安装流程:

通过两行注释,# Ubuntu 16.10 or higher# Ubuntu 14.04 and 16.04可以看出,这里一上来就做了一个分类讨论,同样是在Ubuntu上使用包管理软件安装,高于或等于16.10 和 低于或等于16.04 情况是不一样的。

Ubuntu 16.10 or higher:
sudo apt update
sudo apt install shadowsocks-libev

这里设计的两行代码都以sudo开头,sudo是Linux上的提权命令。Linux上有两种用户:超级用户(root用户)和普通用户。超级用户拥有绝对的权限,可以查看修改系统中的所有文件,可以执行任何代码,可以随意创建删除和修改任何普通用户。而普通用户则只能做权限之内的及其有限的事情,比如查看修改自己用户文件夹里的文件。如果普通用户想要临时执行超级用户才能执行的指令,则必须使用sudo提权,使用sudo后,系统会要求你输入root用户的密码。

「然而」,我们使用ssh登陆到vps时默认其实就是root用户,sudo这个指令是用不到的。这从你的ssh登陆指令就能看的出来,ssh root@your_ip_adress里root就是指定用户。如果你的系统里有一个叫test的普通用户,你其实也可以通过ssh test@your_ip_adress登陆到这个普通用户。

所以,如果你想也不想就依葫芦画瓢把代码搬上去,反而会出错。

接着看,apt update中的apt就是我们上面已经提过好多遍的包管理软件。Linux系统都有包管理软件,不同的发行本使用的包管理软件不均相同,但本质是一样的。你可以包管理软件和360软件管家做类比。它们都可以集中管理安装卸载升级软件。不同的是,包管理软件管理的是不带图形界面的纯命令行控制软件,而它本身也是命令行控制的。apt是Ubuntu上的一个新兴包管理软件,是下面会提到的apt-get的升级版,推荐使用。update是一个传递给apt的参数,告诉apt要更新一下资料库。

第二行,apt install shadowsocks-libev的意思大家应该能明白的。这里传递给apt两个参数,install是英文安装的意思,shadowsocks-libev就是要安装软件的名称,同样以参数的形式跟在install后面传递给apt。

Ubuntu 14.04 and 16.04
sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
sudo apt-get update
sudo apt install shadowsocks-libev

首先,sudo要注意,不再所说。

这里是在旧版本的Ubuntu上安装,没法直接使用apt把一切搞定。原因是,apt的官方资料库里没有对应旧版本操作系统的shadowsocks-libev安装包,需要引入第三方资料库。需要用到另一个包管理软件apt-get6,上面的请两行命令行的作用就是下载引入非官方资料库。第三行更新资料库,第四行下载安装shadowsocks-libev。

使用方法

好吧,在使用方法这一块,教程看起来好像有那么些复杂了。这其实是命令行软件使用方法手册最标准的写法7,但对新手来说,确实不太友好。这里受限于篇幅,我就不详细介绍它在说什么了,讲了意义也不大。

我这里把你会用到的命令下打出来:

ss-server -c ”你的shadowsocks-libev的配置文件的地址“
ss=server -s 你的服务器的IP或域名 -p 你想使用的监听端口 -k 密码 -m 加密方式(比如aes-128-gcm)

上面两行命令行的作用是等价的,只不过一个是把配置信息写进配置文件并让shadowsocks-libev自行加载并提取其中信息8,一个是以参数的形式直接传递给软件。而-c -s -p -k -m都是参数,根据我写在这些参数后面的中文(它们同样也是参数),你应该可以猜到其中的含义。

其它一些细节问题

复杂?简单?

那么,为什么这些我口口声声的“官方教程相对复杂”到底复杂在哪呢?

第一点:你要明白,我这里只是为了用作教学事例摘取了整个教程的一小部分。完整的教程包含了 使用包管理软件安装、使用deb包安装、从源码编译安装和使用docker安装。不仅如此,同样是使用包管理软件安装,不同的操作系统在细节上也有所不同。

有朋友可能要说了,我看了教程了,其它方法同样也就几行东西啊。而且,我本来也就只需要在一个系统上使用一种方法就行了。这就是涉及到第二个复杂点了:越是看起来简单的东西,其实越是复杂。官方教程看起来比第三方教程还简单,是因为它隐去了「大量的」细节。它只是简单地给了你最基本的安装方法,但对于你需要做的准备,需要的基础知识,可能出现的问题及解决办法只字未提。

举个例子,我在注释3里提到过的端口冲突问题。如果你为shadowsocks-libev设置的端口正好有其它程序在使用,系统就会报错,官方教程不会写而如果你又没有这个意识就只会疑惑“shadowsocks-libev怎么总是启动不了呢?”,然后干瞪眼。

再比如,你在服务器上编辑配置文件需要的命令行文本编辑器(比如vim)的使用方法。在自己的电脑上,编辑一下像配置文件这样的纯文本非常简单,双击,系统会自动打开文本编辑器,然后你改就行了。在服务器上,你就用不了有图形界面的文本编辑器了,需要vim这样的命令行文本编辑器。它的基本使用不算复杂,但也需要有人跟你讲。

这些东西第三方教程多多少少都会提一下,而官方则一概没有。

顺带一提,如果你真的遇到了类似的各种各样的问题,请记住,Google is always waiting for you.遇到问题,首先在谷歌上搜索,大部份都是可以找到答案的。

一键安装脚本

说了这么多,请大家暂停片刻,回忆一下自己看过的教程,可能会发现这样一个问题,就算官方教程省略细节,和第三方教程也应该大同小异啊。然而,除了似乎也用过apt-get下载过一点东西(比如vim、wget),感觉两者完全没有相似性。

这里有两个原因,一个是第三方教程增加了诸如 如何选购VPS,如何使用SSH连接,如何使用vim编辑器 这些附加内容。

另一个(也是更为关键)的原因是,第三方教程大部分都是教你「如何通过一键安装脚本安装shadowsocks」。

你可以把一键安装脚本看作一个小程序,它打包了安装配置使用shadowsocks需要的所有指令代码。只要你把这个脚本下载下来并运行,它就会自动化地帮你做好所有的事。

一键安装脚本一个很大的特点是把安装和配置这两件事杂糅在了一起。想想根据官方教程自己安装的话,你输完下载指令,屏幕上刷刷刷地跑代码,一会儿,下载完了安装好了代码不跑了,也就彻底没反应了,接下来的配置使用自己再解决。而一键安装脚本呢?屏幕上代码跑着跑着会突然停下来,提示你输入你想要设定的端口密码加密方式等等。安装好的同时也配置完了,程序直接开始运行。

除此之外,脚本还会自动帮你把程序进程放入后台,为你设置程序开机自启,甚至还有 自 动 更 新 !

不仅如此,一键安装脚本还会为你提供几条手动关闭、开启、重启、更新的指令,帮助你更简单的操作shadowsocks。要知道,shadowsocks程序本身是没有这些功能的(根据版本的不同可能会有区别)。你想关闭程序,需要自己手动杀进程;想重启就要杀完进程再开;更新的话如果你是通过包管理软件更新的倒是方便9,但源码编译安装就得完全再重新安装一遍。

脚本里面,最为著名的莫过于秋水逸水写为各个版本的shadowsocks写的那些个脚本,其中最为恐怖的莫过于那个四合一脚本,一个脚本同时为你安装好四个不同版本的shadowsocks。我觉得这个特别无语,你安装多少个用的不还就那一个。不过你还别说,我小白那会儿(现在是大白)还就喜欢这套,别说四合一,十六合一都不嫌多啊。恨不得有个脚本能把现存的所有能用来翻墙的东西都一股脑儿的装进服务器,你说我vps多了买不起,我翻墙软件多几个还装不起吗?就算不用看看也好啊……

顺带一提,如果有能力,我不建议大家过分依赖一键安装脚本,因为出了问题不好排查,反倒是熟了以后图方便用用倒是无妨。

尾声

我自己照着网上搜来的教程复制黏贴指令那会儿,因为缺乏哪怕最基本的理论指导,遇到过各种麻烦,想靠谷歌解决也因为没有头绪只能像无头苍蝇一样乱搜,即使最后能解决问题也要花费很多时间。我不希望大家也落入和我一样的窘境,故有了这一篇文章。看了下字数,本文洋洋洒洒唠叨了近8000字,去掉复制黏贴的代码,7000字也该有了,但愿能为大家带去哪怕一点点的帮助。

原创内容,转载时请注明出处。

本文同时也发表于Medium

  1. “ps”是Linux上一个帮助管理进程的软件。

    而参数“A”则是告诉ps显示所有的进程,ps默认只会显示当前用户正在前台运行的程序。

  2. 受限于网络质量和系统资源,使用远程界面这样的方式是很不经济很没有效率的。 ↩︎
  3. Shadowsocks也是程序,也需要分配端口。客户端程序端口(也就是你的个人手机电脑上)一般由操作系用分配,不会有什么问题。但服务端程序的端口需要自行指定,有的时候就可能会出现端口占用的问题。碰到这种问题,把你复制黏贴的指令里的那个具体的端口数字换一个就好了。 ↩︎
  4. 如果还不知道 什么是shadowsocks-libev是什么,不知道shadowsocks-libev与shadowsocks关系是什么 的朋友,可以看看我上面提到的我之前写过的一篇文章“浅谈vpn、vps、Proxy以及shadowsocks之间的联系和区别”。里面有较为清晰的阐述。 ↩︎
  5. 官方的教程一般是写给开发者看的,相对生涩难懂。而且,大多都是英文的。 ↩︎
  6. Apt是apt-get的升级版没错,但这不代表apt功能更为强大。相反,apt功能被缩减了。apt的升级主要是使用上的简化,有些事还是需要apt-get做。另外,apt-get和apt共用一套资料库。 ↩︎
  7. 几乎所有的命令行软件,你都可以通过软件名称 -h或者软件名称 --help在或者man 软件名称调出类似的页面。 ↩︎
  8. 关于配置文件的写法网上教程很多,也不是本文的重点,此处不再赘述。 ↩︎
  9. 比如shadowsocks-libev,你只需要输入apt upgrade shadowsocks-libev就可以了。 ↩︎

Comments

  1. 很有帮助,我就是小白。

    ReplyDelete
  2. 很有帮助 感谢

    ReplyDelete
  3. 谢谢分享!
    写得很详细,逻辑、引用清晰明确,很喜欢您的写作风格。

    期待更新。

    ReplyDelete

Post a Comment

Popular posts from this blog

浅谈vpn、vps、Proxy以及shadowsocks之间的联系和区别

V2Ray 简介