出现的问题【一】

为什么 source ~/.profile 之前 Claude 用不了?
因为你跟 Linux01 的 SSH 会话是一个已经打开的终端窗口。
你想想流程:
我把代理配置写进了 ~/.profile 文件(存在硬盘上)
但当前这个 SSH 终端窗口在启动时已经加载了旧的环境变量(那时候 ~/.profile 里还没有代理)
文件改了,但当前终端内存里的变量没变 —— 它不知道文件被改了
所以你在这个窗口里跑 Claude Code,http_proxy 根本没被设置,当然连不上
source ~/.profile 的作用就是告诉当前终端:” 别看内存里的旧值了,重新读一遍 ~/.profile 文件,把新的代理变量加载进来 “。
以后记住一条简单的规律:
新开的终端窗口 / 新 SSH 连接 → 自动读 ~/.profile,代理自动生效
已经开着的终端 → 修改了 ~/.profile 后需要手动 source ~/.profile

出现的问题【二】

frpc 是 systemd 守护进程,它的网络连接是独立的,不受你终端里 export 的环境变量影响。
frpc 在系统启动时就跑起来了,它走的是物理网卡直连 Linux02:7000,跟 xray 代理是两个完全独立的服务
export 的环境变量只影响当前终端里新启动的进程—— 你现在 SSH 进 Linux01,在里面 source ~/.profile,这设置的是你当前这个终端会话的环境变量。但 frpc 进程早就跑着,根本不管你终端里设了啥
xray 只监听 127.0.0.1,它不干预系统网络层,frpc 走的网络路径跟 xray 没有交集
所以即使你在终端里开了全局代理(xray 停掉了),frp 隧道也不受影响 ——frpc 根本不经过 127.0.0.1:10808,它直连 Linux02。
一个更直观的理解:
你从外网 ssh -o Port=2222 xiaoxian@121.89.94.189 这个连接,流量路径是:
你的电脑 → 互联网 → Linux02(公网) → frp隧道 → Linux01:22

常用代码

状态查看

1
2
3
sudo systemctl status xray          # 看运行状态
sudo journalctl -u xray -n 20 # 看最近20条日志
curl -s ipinfo.io/ip # 看当前出口IP(确认代理生效)

启停控制

1
2
3
sudo systemctl start xray           # 启动
sudo systemctl stop xray # 停止
sudo systemctl restart xray # 重启

切换配置(香港 ↔ 美国)

1
2
3
4
5
## 切到香港
sudo systemctl stop xray
sudo cp /opt/xray/config.json /opt/xray/config.us.json.bak
sudo cp /opt/xray/config-hk.json /opt/xray/config.json
sudo systemctl start xray
1
2
3
4
## 切回美国
sudo systemctl stop xray
sudo mv /opt/xray/config.us.json.bak /opt/xray/config.json
sudo systemctl start xray