Skip to main content

使用 SSH 动态端口转发(SOCKS5)访问仅允许国内 IP 的网站

·111 words·1 min
Yilin Fang
Author
Yilin Fang
PhD Student @ OSU CSE

有时候人在国外,但需要访问一些仅允许中国大陆 IP 访问的网站。最直接的办法是在国内服务器上搭建代理服务,例如 SOCKS5、WireGuard 或 OpenVPN。不过对于临时使用或者个人用途,其实有一个更简单的方法:利用 SSH 自带的动态端口转发功能(Dynamic Port Forwarding)创建一个本地 SOCKS5 代理。

这个方案不需要安装额外软件,不需要 Docker,也不需要在服务器上开放新的端口。如果服务器已经可以通过 SSH 登录,那么几乎可以立即使用。

原理
#

假设你有一台位于国内的服务器:

你的电脑(海外)
   SSH 加密隧道
   国内服务器
     目标网站

浏览器的流量先发送到本地 SOCKS5 代理,然后通过 SSH 隧道转发到国内服务器,再由国内服务器访问目标网站。

因此,目标网站看到的来源 IP 将是国内服务器的公网 IP,而不是你当前所在国家或地区的 IP。

创建本地 SOCKS5 代理
#

在本地终端执行:

ssh -D 1080 username@your_server_ip

例如:

ssh -D 1080 root@1.2.3.4

参数说明:

  • -D 1080:在本地监听 1080 端口,并创建一个 SOCKS5 代理。
  • username:服务器用户名。
  • your_server_ip:服务器公网 IP。

连接成功后,不要关闭终端窗口。

此时本地已经有一个 SOCKS5 代理:

Address: 127.0.0.1
Port:    1080

后台运行
#

如果不希望保持终端窗口开启,可以使用:

ssh -f -N -D 1080 username@your_server_ip

参数说明:

  • -f:认证完成后进入后台。
  • -N:不执行远程命令,仅建立隧道。
  • -D: 创建动态转发。

查看是否成功监听:

netstat -an | grep 1080

或者:

ss -lntp | grep 1080

浏览器
#

在 Firefox(原生支持),以及 Chrome(需要插件支持) 新建以下 SOCKS v5 Proxy:

Host: 127.0.0.1
Port: 1080