飘过新加坡的日子 - 天天向上 - 解锁摄像头和扫地机器人海外地区限制(一键穿梭回国) - 2024.10更新
Contents
– 【1】题记 –
我曾经买过2个小米的摄像头,结果都是严重入坑,因为其海外地区限制;无一例外都需要国内IP地址。外加各种懒,折腾固件就算了;国外转了一圈又回国送人了。
最近聊过领事APP和交警12123 点我穿越门 你可以通过国内手机漫游方式曲线救国一把。但是如果诸如摄像头和扫地机器人这些随时在线的,你就需要来个一键穿梭回国了。这玩意很是神奇,外加爱奇艺,CCTV5的加持,对海外兄弟简直是妥妥的刚需。于是乎,市场上充斥着各种靠谱不靠谱的穿梭机;当然这不是我今天讨论的重点。
划重点:自建一个穿梭机。
- 国内朋友/家人路由器(没有固定公网IP,链路不稳定,需要较高本地维护)
- 国内云服务商买一个VPS(Virtual Private Server), 在VPS上部署穿梭机软件
2024.10 更新:
标题党就是各种忙,我5月写的这篇,弄到现在才更新。今天是值得纪念的日子,今年工作上各种苦逼的忙到此就告一段落。一是把新来的团队成员给带了起来,至少我不用再冲在一线没日没夜了;二是mission impossible的项目居然就被我硬生生的交付下来了。
项目管理的交付三角一个都没有拉下,还成长了团队;感觉格局高了不是一个档次,给公司赚了几个“亿”有没有。周五是最后一天验收,我只想说一句:海阔天空。
拉回来,前段时间小伙伴说wireguard封端口;测试了一下,Wireguard的UDP特征非常明显,所以被封是早晚的事情。于是我想到了udp2raw做封装,再跑wireguard。
尝试了一把,链路是建立起来了,但是速度奇慢,2Mbps的VPS的带宽完全跑不起来;最后放弃此方案。
所谓柳暗花明,至此Hysteria 2隆重登场:
- 部署OpenWrt软路由(LuCi界面 )
- 安装passwall图形化插件
- 安装/升级 Hysteria 2核心
如此通过passwall图形化界面配置hysteria 2
–【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.254/24
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 = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -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.1/24
设置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
客户端
- Apple可以装免费的potatso和sockswitch-shadowsokcs;付费用shadowrocket
- Andriod Google Play:Shadowsocks
- 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】Hysteria 2 –
VPS服务器端配置
cat << EOF > /etc/hysteria/config.yaml
listen: :443 #监听端口
#使用自签证书(self-signed)
tls:
cert: /etc/hysteria/server.crt
key: /etc/hysteria/server.key
auth:
type: password
password: <设置VPS认证密码>
masquerade:
type: proxy
proxy:
url: https://baidu.com #伪装网址
rewriteHost: true
EOF
OpenWRT客户端配置
server:
bandwidth: up: 10 mbps #VPS上行带宽 down: 4 mbps #VPS下行带宽
tls: sni: baidu.com # 伪装网站 insecure: true
socks5: listen: 127.0.0.1:1080 #passwall 监听端口1080 http: listen: 127.0.0.1:8080 #passwall 监听端口1080
– 【6】Summary –
部署Hysteria 2在OpenWRT软路由之后,开个CCTV还是奇慢,但是至少解决了扫地机器人联网问题。
进阶玩法可以继续在Hysteria 2通道上封装wireguard;嗯,这个就不折腾了。
–【7】Tips –
- WireGuard on pfSense
- wireguard on Edgerouter
- wireguard on MikroTik
- wireguard on Ubuntu
- wireguard 官网
- Shadowsocks Windows
- Hysteria 2
- Passwall