服务器代理方法

服务器代理方法

sound_kanade Lv1

1. 先让服务器有代理环境

1.1. ssh 反向隧道

要求:

  1. 本机能科学
  2. 能 ssh 连接服务器
  3. 服务器的 /etc/ssh/sshd_configAllowTcpForwarding yes 或者被注释(默认为 yes)

思路:

  1. 通过 ssh 命令,让服务器上的 ssh 服务再监听一个端口
  2. 当请求进入这个端口时,通过 ssh 连接,把请求传到本机
  3. 本机再转到可以科学的 ip:port,从而获取科学环境

简图:
|500

场景假设:

  1. 本地 windows 7890 上有 clash
  2. vmware 里有虚拟机,虚拟机网络为 桥接 模式
  3. 此时虚拟机 ip 是 192.168.124.15
  4. windows ip 是 192.168.124.5

具体操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 如果在 windows 上开启 ssh 反向隧道
# 本机有 clash 所以是 127.0.0.1
ssh -R 12345:127.0.0.1:7890 -p 22 root@<服务器ip> -N -f

# 如果在虚拟机中开启 ssh 反向隧道
# 虚拟机无 clash 所以要指向 windows:192.168.124.5
ssh -R 12345:192.168.124.5:7890 -p 22 root@<服务器ip> -N -f

# 在服务器上检查效果
# 检查第一步:12345 有 ssh 服务
╰─❯ netstat -tunlp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 736/sshd: /usr/sbin
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN 353706/sshd: root
tcp6 0 0 :::22 :::* LISTEN 736/sshd: /usr/sbin
tcp6 0 0 ::1:12345 :::* LISTEN 353706/sshd: root
# 检查第二步:可以访问谷歌
╰─❯ curl -x localhost:12345 -I www.google.com
HTTP/1.1 200 OK

注:-N 不执行远程命令 -f 在后台运行 ssh 会话

总结:
最简单快捷、侵入性最低的办法

1.2. 内网穿透工具

工具举例:
frp、rathole 等

要求:

  1. 本机能科学
  2. 本机、服务器上都安了工具
  3. 服务器需要新开一个端口(起到 ssh 反向隧道中的 22 端口的作用)

思路:
和 ssh 反向隧道一样

ssh 反向隧道:
服务器访问 google => 服务器 12345 端口 => ssh 服务拿到请求 => ssh 隧道 => 本机 => 科学环境
frp、rathole:
服务器访问 google => 服务器 12345 端口 => frp、rathole 拿到请求 => 工具长连接 => 本机 => 科学环境

具体操作:
(场景不变,这里只举例上面第二种虚拟机连接的情况)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# rathole 安装步骤省略
# 服务器上的配置文件(部分)
[server]
bind_addr = "0.0.0.0:11111" # 长连接端口

[server.services.my_win_clash]
token = "my_secret_token"
bind_addr = "0.0.0.0:12345"

# 虚拟上的配置文件(部分)
[client.services.my_win_clash]
token = "my_secret_token"
local_addr = "192.168.124.5:7890"

# 配置解释
11111 类似 ssh 中的 22
my_win_clash 是用户自定义的,要能对上
my_secret_token 相当于连接密码,要能对上

检查效果

1
2
3
4
5
6
7
# 第一步:rathole 已监听 7890 端口
╰─❯ netstat -tunlp | grep rathole | grep 7890
tcp 0 0 0.0.0.0:7890 0.0.0.0:* LISTEN 665336/rathole

# 第二步:可以访问谷歌
╰─❯ curl -x localhost:7890 -I www.google.com
HTTP/1.1 200 OK

总结:
比 ssh 麻烦,但更稳定

2. 再保证应用走环境

2.1. 全局环境变量

常用变量

1
2
3
4
5
6
7
8
9
10
11
12
13
# 大写
ALL_PROXY
HTTP_PROXY
HTTPS_PROXY
FTP_PROXY
SOCKS_PROXY

# 小写
all_proxy
http_proxy
https_proxy
ftp_proxy
socks_proxy

设置方法
编辑 ~/.zshrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 开启代理
proxyon () {
export ALL_PROXY="http://localhost:7890"
export all_proxy="http://localhost:7890"
echo export ALL_PROXY="http://localhost:7890"
echo export all_proxy="http://localhost:7890"
}

# 取消代理
proxyoff () {
unset ALL_PROXY
unset all_proxy
echo unset ALL_PROXY
echo unset all_proxy
}

# 查看代理
proxyecho () {
echo ALL_PROXY="$ALL_PROXY"
echo HTTP_PROXY="$HTTP_PROXY"
echo HTTPS_PROXY="$HTTPS_PROXY"
echo FTP_PROXY="$FTP_PROXY"
echo SOCKS_PROXY="$SOCKS_PROXY"
echo all_proxy="$all_proxy"
echo http_proxy="$http_proxy"
echo https_proxy="$https_proxy"
echo ftp_proxy="$ftp_proxy"
echo socks_proxy="$socks_proxy"
}

2.2. 手动指定

注:除非有特殊配置,git、curl、wget 只需配置全局变量,就可以走代理了

2.2.1. curl

-x 选项

1
2
3
4
5
# 示例一
curl -x localhost:7890 -I www.google.com

# 示例二
curl -x localhost:7890 -LO https://github.com/fastfetch-cli/fastfetch/releases/download/2.27.1/fastfetch-linux-amd64.deb

2.2.2. docker

  1. docker-cli、dockerd、docker container 三者代理设置是独立的
  2. 如果需要成功 docker pull 镜像,需要同时配置 docker-cli、dockerd 代理
  3. 如果需要运行时的容器,通过代理访问外部网络,需要配置 docker container 代理

docker-cli 代理配置
按照 2.1. 全局环境变量 配置了环境变量即可

dockerd 代理配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 建目录
sudo mkdir -p /etc/systemd/system/docker.service.d

# 建文件,比如命名为 proxy.conf
vim /etc/systemd/system/docker.service.d/proxy.conf

# 文件内容
[Service]
Environment="HTTP_PROXY=http://localhost:7890"
Environment="HTTPS_PROXY=http://localhost:7890"

# 使文件生效
sudo systemctl daemon-reload
sudo systemctl restart docker

# 检查是否生效
# 检查方式一
systemctl show --property=Environment docker
# 示例输出如下
Environment=HTTP_PROXY=http://localhost:7890 HTTPS_PROXY=http://localhost:7890

# 检查方式二
docker info | grep -i proxy
# 示例输出如下
HTTP Proxy: http://localhost:7890
HTTPS Proxy: http://localhost:7890

docker container 代理配置(待测试)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 编辑文件
~/.docker/config.json

# 内容
{
"proxies":
{
"default":
{
"httpProxy": "http://localhost:7890",
"httpsProxy": "http://localhost:7890",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}

附件
测试 docker pull mysql:8.0 命令成功拉取条件

  • Title: 服务器代理方法
  • Author: sound_kanade
  • Created at : 2024-10-21 15:40:37
  • Updated at : 2024-11-02 15:39:29
  • Link: https://blog.megumiai.com/deploy/server_proxy_method.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments