0%

关于vpn的那些事

在外企上班,公司网络是直接vpn到新加坡的,也经常要用slack等工具进行线上交流,没个梯子还经常挺不方便的。最近抽空折腾了一下,写个文章记录一下过程。

服务器

服务器我用的是virmach,1.25刀一个月,价格还是挺实惠的,500GB的网络带宽应该是用不完的,至于网络速度,我测试了一下,youtube里的720p视频可以流畅播放。

在购买之前,最好先买一个月的主机试用一下,不同的地区的网络状况是不一样的,可以用站长工具来测一下速,我先后买过两个区的主机,本人在上海,第一个主机买的芝加哥,联通速度比较满意,移动网络有点卡,但是也能用,但是第二个主机在水牛城,联通速度却很卡,网络延时很大,移动的网络挺好延时一秒多.所以根据自己的需求和实际情况做一个使用前测试很有必要.或者可以购买多个区的来做备份,但也最好提前测试一下.

测试方法

在目标主机上用nginx搭一个静态网站,里面放一个150k的index.html文件

1
docker run --name some-nginx -p 80:80 -v /home/ubuntu/www/:/usr/share/nginx/html:ro -d nginx

测试结果

测试的整体情况

水牛城主机,可以看出上海联通延迟很大

上海移动延迟比较满意,只有1.55s

服务端

服务端我用的是的shadowsocks-libv,为了与系统环境进行隔离,方便进行迁移,我用的是docker的方式来进行部署的,在官方hub里就有相应的docker镜像,使用还挺方便的。

如果没有docker的话,得先安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
# install common tools
sudo apt-get update
sudo apt-get install -y vim git curl zsh htop python3-pip

# install docker
curl -ssl https://get.docker.com/ | sh
sudo groupadd docker
sudo usermod -aG docker $USER

# install docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

  • docker直接运行
    1
    docker run -e PASSWORD=<password> -p<server-port>:8388 -p<server-port>:8388/udp -d shadowsocks/shadowsocks-libev
  • docker-compose方式,我更推荐这种方式,更加便于维护和管理,写一个docker-compose.yml,内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    version: '2'
    services:
    shadowsocks1:
    image: shadowsocks/shadowsocks-libev
    container_name: shadowsocks1
    environment:
    PASSWORD: password
    # METHOD: CHACHA20-IETF-POLY1305
    ports:
    - "8388:8388"
    - "8388:8388/udp"
    # volumes:
    # - $PWD/config:/etc/shadowsocks
    restart: always
    然后运行docker-compose up -d来启动shadowsocks服务,如果不配置method,默认是使用aes-256-gcm方法

客户端

Shadowsocks 目前的客户端基本各个平台上面的都有。本文主要介绍在 Windows、macOS、Linux、Android、iOS、OpenWRT 平台上常用的一些客户端。

需要说明的一点是,如果使用Outline客户端,需要一个访问密钥,那这个访问密钥是怎么生成呢?

规则如下:

1
2
3
4
5
6
const method='aes-256-gcm'
const password='password'
const host='107.174.250.123'
const port='8388'
const name='myss'
console.log( "ss://" + btoa(`${method}:${password}@${host}:${port}`)+ '#' + name )

例如:

1
2
3
4
method: rc4-md5
password: test123
host: 283.234.123.21
port: 4000

拼接字符串得到:rc4-md5:test123@283.234.123.21:4000
进行base64编码以后,得到:

1
cmM0LW1kNTp0ZXN0MTIzQDI4My4yMzQuMTIzLjIxOjQwMDA=

最后访问密钥如下:

1
ss://cmM0LW1kNTp0ZXN0MTIzQDI4My4yMzQuMTIzLjIxOjQwMDA=#shadowsock

更新: 发现原来还有一个官网,里面可以自动生成这个链接.
picture 1

Windows

Shadowsocks Windows: GitHub

在 Windows 平台推荐使用,由官方出品,需要安装 .NET Framework,请尽量使用最新版本。使用教程请参考:在 Windows 中配置 Shadowsocks 客户端

Outline Windows: GitHub/Direct Download

OutlineGoogle Jigsaw 出品,功能上比较简单,必须使用秘钥进行连接。

macOS

ShadowsocksX-NG: GitHub

新一代的 ShadowsocksX,底层是基于 Shadowsocks-libev 的 ss-local 客户端。使用教程请参考:在 macOS 中配置 Shadowsocks 客户端

Outline macOS: GitHub/App Store

OutlineGoogle Jigsaw 出品,功能上比较简单,必须使用秘钥进行连接。

Linux

Shadowsocks Qt5: GitHub

Shadowsocks 在 Linux 上唯一的 GUI,请按照 Wiki 安装指南进行安装, 如果你喜欢命令行的请使用 Shadowsocks-libev 客户端。使用教程请参考:在 Linux 中配置 Shadowsocks 客户端

Android

如果无法访问 Google play 请下载 apk 安装。

Shadowsocks Android: GitHub/Google Play (beta)

Shadowsocks 官方开发的 Android 版本,功能强大,推荐使用。使用教程请参考:在 Android 中使用 Shadowsocks 客户端

Outline Android: GitHub/Play Store/Direct Download

OutlineGoogle Jigsaw 出品,功能上比较简单,必须使用秘钥进行连接。

iOS

目前在 App Store 上面无法在中国区搜索到,请使用非中国大陆区的账号搜索并购买。

Outline iOS: GitHub/App Store

OutlineGoogle Jigsaw 出品,功能上比较简单,必须使用秘钥进行连接。可以免费下载。

Potatso Lite: App Store

Potatso 的简版,不过功能够用,可以免费下载。

Shadowrocket: App Store

Shadowrocket 应该属于目前最火的 Shadowsocks iOS 客户端了,功能强大,更新快。性价比非常高,推荐购买使用,目前美区是 $2.99 的价格。使用教程请参考:在 iOS 中使用 Shadowsocks 客户端

OpenWrt/LEDE

Shadowsocks-libev for OpenWrt: GitHub

OpenWrt LuCI for Shadowsocks-libev: GitHub

在 OpenWrt/LEDE 的路由器中使用 Shadowsocks,配合 ChinaDNS 和 DNS-Forwarder 使用更好,在这里查看 OpenWrt/LEDE Shadowsocks 安装教程。

其它方案

与shadowsocks齐名的还有v2ray,部署要复杂得多,可以作为一个备选项.