利用开源frp+ss升级搭建翻墙VPN

2020-03-01

之前直接利用ss搭建翻墙VPN已经成功被 GFW 封杀,可能是因为是建墙者可以成功检测出 利用 ss 传输协议的特征,从而利用传输协议的特征来封禁服务端的IP,最终导致我 ping 都不能ping通 服务端的机器。很是无语,最终尝试了不同地域的境外的 VPS 云服务,都以 IP 被封禁而告终。

最近朋友跟我说可以利用frp中转ss的方法避开 GFW 的检测,于是我 Google 了下关键字进行学习和尝试,用了一天时间折腾终于搭建成功了。目前该方法的流量协议未被 GFW 检测到,但不代表该方法会一直有效下去,因为GFW 流量检测协议的策略本身就是个不断升级的工作,所以我们也要不断的升级翻墙VPN的方法,这也是市面上很多卖翻墙VPN的工具帐号不能永久有效的原因。

下图给出frp+ss升级搭建中转翻墙VPN的概要原理图,由下图可知主要包含三部分的配置:客户端ss、中转服务器和ss服务器。这篇笔记首先介绍客户端ss的配置,作为用户你只需要配置客户端ss即可,其余无需关心;然后介绍中转服务器的配置;其次介绍ss服务器端的配置;最后总结并对未来针对 GFW 作一些未来应对策略。

avatar

客户端ss配置

PC客户端软件下载可到 GitHub 发布的 Releases 下载最新的版本即可( windows版Mac版 ),移动端(Android版),苹果移动端也是有的可以自己搜索下。

客户端ss大致的工作原理可以参考下以前写的 blog 。PC客户端可以结合Chrome插件 SwitchyOmega 使用,其中ss信息配置如下(不要薅我流量,黑户也不要攻击我的机器,仅供程序员学习使用):

地   址: 39.97.122.11:12345
加密方法: aes-256-cfb
密   码: Dont_be_evil
备   注: Dont_be_evil

ss配置完可以用百度看下IP地址,IP地址重定向到香港的阿里云即配置正确,如下图所示方式查看测试结果:

avatar

中转服务器配置

中转服务器我是选用的是北京阿里云,成本有点高(大概60元/月,唉,只有每个月省点了)。中转服务器主要负责将请求转发到ss服务器,然后由ss服务器完成并返回至中转服务器,最后中转服务器将数据返给客户端。中转服务器的配置主要是 frps 服务端的配置,它负责请求的转发。下面就环境安装、服务端配置和启动服务作一下说明。

环境安装: frp软件可到Github 的releases 的 官方网站 进行下载解压即可。

服务端配置: 修改以上解压后目录的 frps.ini 文件,详细如下:

[common]
# 穿透服务器端监听的端口,默认7000
bind_port = 7000

# 管理日志:日志存放位置;日志记录级别(debug/info/warn/error);保存天数
log_file = ./frps.log
log_level = debug
log_max_days = 30

# shadowsocks代理服务端配置;bind_addr为穿透服务器ip地址,或填 0.0.0.0 也行;listen_port为外部监听端口
[shadowsocks]
type = tcp
bind_addr = 0.0.0.0
listen_port = 12345

启动服务: 通过 nohup ./frps -c ./frps.ini & 挂后台启动服务,通过 frps.log 文件查看日志。通过 ps aux | grep frps 查看服务是否已经起来。

注:1. 境内服务器防火墙需打开 7000 和 12345 端口;2. 境内外云产品最好用同一个商家,这样 ping 会用更少的跳数达到目的地;

境外ss服务器配置

境外服务器我是选用的是香港阿里云,大概24元/月。境外需要配置两个服务:一个是ss服务;另一个是frpc的服务。下面就这两个服务分别作一个说明。

ss服务配置

其中ss服务与正常ss配置方法完全相同(可参考之前的 blog ),这里只给出配置的结果。

$ cat /etc/shadowsocks.json
{
    "server":"0.0.0.0",
    "server_port":8432,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"Dont_be_evil",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

$ ssserver -c /etc/shadowsocks.json -d start

注:1. 可通过 ps aux | grep ssserver | grep -v grep 查看服务是否已经起来;

frpc服务配置

环境安装: frp软件可到Github 的releases 的 官方网站 进行下载解压即可,与中转服务器环境安装完全一致(同一个文件夹下同时放着 frps 和 frpc 文件)。

客户端配置: 修改以上解压后目录的 frpc.ini 文件,详细如下:

[common]
# 中转服务器的ip地址
server_addr = 39.97.122.11
# 中转服务器的监听端口
server_port = 7000

# 管理日志:日志存放位置;日志记录级别(debug/info/warn/error);保存天数
log_file = ./frpc.log
log_level = debug
log_max_days = 30

# ss配置:访问本地ss服务的8432端口,与ss配置的 server_port 一致;remote_port与客户端访问端口一致。
[shadowsocks]
type = tcp
local_ip = 127.0.0.1
local_port = 8432
remote_port = 12345

启动服务: 通过 nohup ./frpc -c ./frpc.ini & 挂后台启动服务,可通过 ./frpc.log 文件查看日志。通过 ps aux | grep frpc 查看服务是否已经起来。

注:1.境外服务器防火墙打开 7000 端口,但阿里云不打开 7000 端口也可以访问,可能是阿里云间通信通过内网的原因; 2. frp是一个可用于内网穿透的高性能的反向代理应用,对于不写服务的同学来说frp有点难以理解,可以尝试去看一下demo,关于它的应用可以参考 Github官网链接 Readme的示例,基本看第1个 SSH 示例基本可以理解其作用。

总结

这篇笔记主要介绍了利用frp+ss升级搭建翻墙VPN的方法,包含三个部分的配置:客户端配置、中转服务器配置和境外服务器配置,其中境外服务器配置包含ss服务配置和frpc服务配置。

该搭建VPN的方法目前可以绕过GFW的特征流量检测,但也并非永久有效,其实翻墙者与建墙者的攻与防本身就是一个无止境的话题。当建墙者可以检测到特征流量时,我们只有寻找下一个解决方案。就目前而言,如果该搭建方法被GFW拦截了,可以尝试 v2ray 框架来搭建VPN。

参考文献

  1. 树莓派frp内网穿透及ss配置
  2. Github frp官网
  3. 利用开源ss工具快速搭建翻墙VPN
  4. 朋友的搭建ss笔记