Skip to content
Beginner / 2 min read

在 Linux 上使用 ChangeMyIP:更改你的 IP 并验证(新手设置)

一份面向新手、以终端为主的实操指南:将 Linux 流量通过 ChangeMyIP 的 HTTP 和 SOCKS5 端点转发,然后用 curl 检查和一个泄漏排查测试来证明 IP 确实发生了变化。

Linux SOCKS5 HTTP(S) 隐私/匿名性

概述

代理会改变目标网站看到的 IP 地址,因为网站应答的是代理,而不是你的机器。在 Linux 上,你既可以让单个命令指向某个 ChangeMyIP 端点,也可以设置大多数命令行工具会自动读取的环境变量。本教程以新手友好的方式介绍这两种方法,并在最后提供验证步骤,让你确认更改确实生效。

ChangeMyIP 提供共享和独享数据中心代理,以及带轮换 IP 的住宅代理,可通过 HTTP 和 SOCKS5 访问,同时也支持 Shadowsocks、Trojan、DNS 和 WireGuard。作为首次配置,本指南只使用 HTTP 和 SOCKS5。

开始之前

  • 一个有效的 ChangeMyIP 订阅。你的控制面板或套餐详情中会列出你要使用的代理主机、端口以及用户名/密码。
  • 一台装有 curl 的 Linux 机器(桌面版或服务器版)。用 curl --version 确认。
  • 一个终端会话。为测试新开一个 shell,这样你可以直接关闭它并丢弃所有设置。
  • 可选:一个用于编辑 shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)的文本编辑器。

为任务选择合适的端点

端点类型 IP 的行为方式 典型首次用途
共享数据中心 共享池中众多 IP 之一;其他用户可能看到同一个 IP 测试你的配置是否可用、一般浏览
独享数据中心 分配给你账户的一个 IP 为你自己拥有的账号保持一个稳定的身份
住宅 从真实 ISP 地址段中提取的轮换 IP 查看地理定向页面、中等规模的数据采集

你的套餐详情决定你可以请求哪些国家或城市代码。ChangeMyIP 的 IP 池覆盖 40 多个国家和 300 多个城市;请严格按照你套餐的文档说明使用国家和城市参数,不要凭猜测填写。

步骤

第 1 步:将凭据加载到 shell

read -r -p "Proxy host and port (host:port): " CM_HOST
read -r -p "Proxy username: " CM_USER
read -r -s -p "Proxy password: " CM_PASS; echo

read -s 会让密码不出现在屏幕上,也不进入 shell 历史记录。这些命令不会把任何内容写入磁盘。

第 2 步:记录你当前的 IP

echo "Direct IP: $(curl -sS https://api.ipify.org)"
echo

把这个值记下来。稍后你会将它和走代理后的结果作比较。任何 IP 回显服务都可以;这里使用 api.ipify.org,因为它返回的是不带多余标记的纯地址。

第 3 步:测试 HTTP 端点

curl -sS --proxy "http://$CM_HOST" --proxy-user "$CM_USER:$CM_PASS" https://api.ipify.org
echo

如果认证成功且端点可达,打印出的地址就会与第 2 步中的直连 IP 不同。现在先保持使用显式的 curl 命令;环境变量放在后面介绍。

第 4 步:测试 SOCKS5 端点

curl -sS --socks5-hostname "$CM_HOST" --proxy-user "$CM_USER:$CM_PASS" https://api.ipify.org
echo

--socks5-hostname 形式会让代理去解析目标主机名,因此目标域名不会询问你本地的 DNS 解析器。而单纯的 --socks5 标志是在本地解析,对于注重隐私的配置来说通常不是正确选择。

第 5 步:为当前会话设置代理环境变量

export http_proxy="http://$CM_USER:$CM_PASS@$CM_HOST"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1,::1"
curl -sS https://api.ipify.org
echo

curl、wget、git、pip 以及许多其他命令行工具会自动读取这些变量。no_proxy 列表让本地地址(例如运行在 3000 端口的开发服务器)不走代理隧道。

第 6 步:添加开关辅助函数,而不是永久导出

# 追加到 ~/.bashrc 或 ~/.zshrc
proxy_on() {
  : "${CM_HOST:?Set CM_HOST, CM_USER, and CM_PASS first}"
  export http_proxy="http://${CM_USER}:${CM_PASS}@${CM_HOST}"
  export https_proxy="$http_proxy"
  export no_proxy="localhost,127.0.0.1,::1"
  echo "HTTP/HTTPS proxy on"
}
proxy_off() {
  unset http_proxy https_proxy no_proxy
  echo "HTTP/HTTPS proxy off"
}

用 source ~/.bashrc 重新加载该文件,然后在你需要隧道时输入 proxy_on,不需要时输入 proxy_off。让代理一直处于导出状态,是导致其他无关工具出现莫名故障的常见原因。

第 7 步:了解环境变量覆盖不到的部分

  • 浏览器、Electron 应用和桌面服务通常不理会 shell 环境变量。请改为在应用本身或桌面的网络设置中配置代理。
  • 像 Docker、snapd 这样的后台守护进程以及部分包管理器需要各自的配置文件。
  • 每个 shell 会话只能有一个全局代理生效,所以如果你需要同时比较两个端点,请分别打开不同的终端。

第 8 步:确认更改并排查 DNS

curl -sS https://ipinfo.io/ip; echo
curl -sS https://ipinfo.io/country; echo

国家/地区值应当与你所选的 ChangeMyIP 端点所在区域一致。无论使用 HTTP 还是 --socks5-hostname 形式,都由代理解析目标主机名,因此目标域名不会询问你本地的解析器。如果你还运行了本地 DNS 解析器或透明代理,请在浏览器中做一次 DNS 泄漏测试,确认你的查询从预期的位置发出。

故障排查

症状 可能原因 解决办法
curl: (22) ... 407 缺少代理凭据或凭据错误 重新检查用户名和密码,并显式传入 --proxy-user
curl: (7) Failed to connect 主机或端口错误,或防火墙拦截 从套餐详情中复制主机和端口;确认端口可达
export 之后 IP 没变 在另一个 shell 中导出,或该工具忽略环境变量 在当前 shell 中运行 proxy_on,并先用 curl 测试
curl 能用但浏览器不行 浏览器不读取 shell 变量 在浏览器的代理设置或桌面网络面板中填写主机和端口
有些网站能打开,有些被屏蔽 共享数据中心 IP 被目标网站标记 改用住宅端点重试
HTTP 能用但 SOCKS5 失败 本地 DNS 解析,或 SOCKS 标志使用错误 使用 --socks5-hostname
每次测速结果不一样 共享数据中心池拥堵 换另一个城市的端点测试

总结

在 Linux 上更改 IP 归结为三件事:持有有效的 ChangeMyIP 凭据、告诉工具把流量发往哪里,以及验证结果。先用 curl 和显式标志测试,成功后再改用 http_proxy 和 https_proxy 环境变量,并通过 proxy_on 和 proxy_off 辅助函数来启用它们,这样在你不用测试时正常流量不受影响。用 IP 回显服务确认新的 IP 和国家/地区,在希望由代理处理 DNS 时优先使用 --socks5-hostname,并记住图形界面应用需要各自配置代理设置。