– 【1】题记 –

我曾经买过2个小米的摄像头,结果都是严重入坑,因为其海外地区限制;无一例外都需要国内IP地址。

最近聊过领事APP和交警12123 点我穿越门 你可以通过国内手机漫游方式曲线救国一把。但是如果诸如摄像头和扫地机器人这些随时在线的,你就需要来个一键穿梭回国了。这玩意很是神奇,外加爱奇艺,CCTV5的加持,对海外兄弟简直是妥妥的刚需。于是乎,市场上充斥着各种靠谱不靠谱的穿梭机;当然这不是我今天讨论的重点。

划重点:自建一个穿梭机。

  • 国内朋友/家人路由器(没有固定公网IP,链路不稳定,需要较高本地维护)
  • 国内云服务商买一个VPS(Virtual Private Server), 在VPS上部署穿梭机软件

–【2】国内云服务商VPS –

主流的几家:

  • Azure
  • 腾讯云
  • 百度云
  • 阿里云
  • 华为云

VPS和亚马逊的EC2技术实现上虽然不一样,但功能一致,殊途同归。VPS偏向轻型化主机;部署一键穿梭回国那是足够足够了。

特想吐槽的是,国内严格的网络监管,让VPS的配置非常的畸形,用腾讯云举例(其他云大同小异),最便宜的VPS限制3Mbps带宽,然后每月200GB的流量。

呵呵,3M带宽,也就勉强拉个CCTV5。

好吧,哪个便宜那个来,挑了腾讯云(第一年RMB 82),满足VPS的基本需求:

  • 公网IP
  • 2 vCPU, 2G RAM, 40G SSD
  • 3Mbps带宽,200GB每月总流量
  • SSH密钥登录
  • snapshot快照
  • 试用30天
  • 微信绑定(需实名认证)
  • Authenticator 2FA

– 【3】一键穿梭软件部署 –

VPS操作系统可以选CentOS (已经EOL了) 或者Ubuntu;搞定SSH密钥之后,就可以远程登录VPS了。

现在主流的软件有两个:wireguard和Shadowsocks

  • 两者都是open source
  • 两者技术实现不一样,Shadowsocks基于SOCKS5 proxy(server/client);然后wireguard基于密钥点对点(peer to peer)
  • 两者都可以实现一键穿梭回国(国内地址)

成人的世界我全要,两个我都部署了一遍,性能比较如下:

  • Shadowsocks数据转发上会快一些,3M的带宽挂CCTV5还是可以接受的。
  • Wireguard毕竟先点对点Tunnel,再做数据转发,一般都有300ms的延迟,冲击CCTV5有点困难。

好在我的需求就是懒人包,存粹冲着扫地机器人去的;最后选择:wireguard

– wireguard –

wireguard 虽然应用模式上server/client,但严格意义上是点对点Tunnel。

VPS服务器端

  • sudo apt update
  • sudo apt install wireguard
  • sudo wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

生成密钥,private key自己用,public key给对方(点对点) - sudo cat /etc/wireguard/server_private.key

查看private key密钥 - sudo ip address

确认VPS出口网卡,一般都是eth0 - sudo nano /etc/wireguard/wg0.conf

创建配置文件,这样用systemctl自动启动wireguard

服务器端配置文件

[Interface]

Address = 172.16.1.25424

Wireguard 生成虚拟网卡wg0,然后需要给这个虚拟网卡设置一个私有地址,随便挑一个,只要和VPS内网地址不冲突即可。

ListenPort = 51820

Wireguard 监听端口,VPS防火墙要开放这个UDP端口号

SaveConfig = true

每次重启,配置会保留
sudo wg-quick down wg0
sudo nano /etc/wireguard/wg0.conf
sudo wg-quick up wg0
修改配置

PrivateKey = xxxx

粘贴前面生成的private key

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

客户端连接到服务器端的wg0虚拟网卡后做NAT转换到VPS的出口网卡

[Peer]

配置客户端(wireguard需要点对点)

PublicKey = xxx

粘贴客户端生成的public key

AllowedIPs = 172.16.1.0/24

服务端设置成单点172.16.1.254对多点客户端172.16.1.1-253
  • sudo systemctl start wg-quick@wg0
  • sudo systemctl enable wg-quick@wg0
  • sudo systemctl status wg-quick@wg0
  • sudo wg

wireguard服务器端部署完成

  • sudo nano /etc/sysctl.conf

net.ipv4.ip_forward = 1

  • sudo sysctl -p

    修改系统配置,允许VPS做路由转发

  • sudo ufw allow 51820/udp

    修改VPS防火墙设置

PC客户端

配置文件和VPS服务器端类似,以Windows为例,手工创建一个配置文件:

[Interface]

PrivateKey = xxxx

粘贴PC客户端的private key

ListenPort = 51820

设置PC客户端的监听端口

Address = 172.16.1.124

设置PC客户端wg0虚拟网卡地址

DNS = 223.5.5.5

设置阿里云的DNS服务,Google DNS国内无法使用

[Peer] PublicKey = xxx

粘贴VPS服务器端的public key

AllowedIPs = 0.0.0.0/0

设置PC客户端的网络数据全部通过VPS转发

Endpoint = VPS服务器端的公网地址:监听端口

PersistentKeepalive = 25

– shadowsocks –

几个版本

  • shadowsocks (ss): python 实现
  • shadowsocks-libev (ss-libev): C 实现,轻量化部署
  • shadowsocks-rust (ss-rust): rust实现

以下以ss-libev进行部署

VPS服务器端

  • sudo apt update
  • sudo apt install shadowsocks-libev
  • sudo nano /etc/shadowsocks-libev/config.json

“server”:[“0.0.0.0”],

简单配置监听端口和密码

“mode”:“udp”,

“server_port”:8388,

VPS服务器端监听端口

“local_port”:1080,

“password”:“xxxxx”,

设置客户端连接密码

“timeout”:60,

“method”:“aes-256-gcm”

设置客户端加密方式
  • sudo ufw allow 8388

    修改VPS防火墙设置

  • sudo systemctl restart shadowsocks-libev

  • sudo systemctl status shadowsocks-libev

  • sudo systemctl enable shadowsocks-libev.service

客户端

  1. Apple可以装免费的potatso和sockswitch-shadowsokcs;付费用shadowrocket
  2. Andriod Google Play:Shadowsocks
  3. Windows:Shadowsocks

注:

  • Windows shadowsocks client开启PAC模式
  • Firefox network setting:manual proxy: SOCKS Host 127.0.0.1:1080

– 【4】旁路由/旁路网关部署 –

Openwrt可以同时支持Wireguard和Shadowsocks。但Shadowsocks终究是client proxy模式,想要使用旁路节点的还是Wireguard的部署比较容易。

选择上:

  • 市面主流WIFI 路由器诸如华硕,TP-Link都内置支持wiregurad
  • 动手能力再强一点就可以上EdgeRouter X,MikroTik这些路由器
  • 如果跑虚拟机,软路由的话可以上penwrt和pfsense

–【5】Tips –

  1. WireGuard on pfSense
  2. wireguard on Edgerouter
  3. wireguard on MikroTik
  4. wireguard on Ubuntu
  5. wireguard 官网
  6. Shadowsocks Windows

AD

S