无聊工程: 使用境外流量卡创建一个家用局域网代理服务

题外话

如果不是某CuniqHK的卡签了合约,可能不会有这篇文章。因为在使用过程中我发现把卡插在手机里直接用会有很多不方便的地方,比如健康码、丰巢、共享单车之类的本地服务在使用外卡加载的时候会有各种奇奇怪怪的卡顿或者报错。

另外需要说明这个纯粹时用来花境外流量的无聊工程,因为现在有很多成熟且高性价比的替代方案可以选择。

软硬件需求清单

  • 一张境外流量卡
  • 一个随身WiFi设备:这个设备插在主机上,需要能被电脑识别成网卡。
  • 一台运行Ubuntu的主机设备(虚拟机其实也可以,用Host模式接入本地网络),我用的廉价NUC
  • 家中要有现成的无线路由器

能搞出啥呢?

蓝色虚线标注了经由代理访问的路由。当不使用代理时,经由主路由器走境内宽带。

在使用iOS的手机上可以使用”无线局域网”设置界面内的“HTTP”代理功能,连上Ubuntu主机开启的代理服务,走USB 4G网卡的线路上(外)网。

当然了,如果配合Clash之类的允许配置路由规则的App,费些功夫就能给不同的流量设置规则,使得流量卡线路和国内线路能够并用。本文只是想做PoC,所以没管这些。

配置步骤

首先,Ubuntu主机通过网线与主路由器相连。一般情形下,路由器设置一个“静态分配”的路由给这个Ubuntu主机,避免分配的局域网IP地址因为DHCP发生变动。

随后把USB 4G网卡也插上Ubuntu主机,正常情况下主机会识别到这个USB网卡,在终端输入ifconfig能看到它:

上图所示192.168.8.152是USB 4G网卡分配到的IP地址,10.36.1.30是主路由器给分配的地址,也是即将搭建的Proxy Server的服务地址。

由于接入了两张网卡,ubuntu的默认路由里这两张网卡会有不同的优先级。通常来说后连入的设备优先级更低,这样在路由表走默认路由“兜底”的时候会走有线线路出去访问互联网。

这并不是我们想要的,所以需要通过命令来把路由表改一下,让enx0c5b8f279a64这个设备优先。

sudo route del default gw 10.36.1.1 enp3s0
sudo route add default gw 10.36.1.1 dev enp3s0 metric 110 # 这边把优先级改成了110(更低)
sudo route del default gw 192.168.8.1 enx0c5b8f279a64
sudo route add default gw 192.168.8.1 dev enx0c5b8f279a64 metric 100 # 提升4G设备的优先级到100
sudo ip route flush cache

可以再输入一下route命令,看看是否Metric上的值发生了变化。

接着是配置一个代理服务器,又一个开源i项目叫gost(https://v2.gost.run/)的,很方便。如果要保持持续运行的话,最简单的就是用nohup或者tmux启动它。

sudo snap install core
sudo snap install gost # 安装

#随后通过命令就能启动了
sudo gost -L 10.36.1.30:8080

代理服务器启动后,就可以在手机上设置了,最简单的http代理就能work。需要注意一点,如果使用的是socks类代理,要注意DNS解析不能使用客户端机器上的,不然会有dns污染的现象。HTTP代理似乎不受影响(参考此处)。

免责声明

本文仅做技术讨论。至于如何获取境外流量卡合法上网,那就各显神通吧。

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.