一个相对完整的局域网代理方案

本文最后更新于 2024年7月13日 下午

前言

背景: 实验室有一台 8 卡的服务器在学校管理的机房里面,机器无法连校园网,但是可以和校园网内其他服务器互联。

本文简单记录一下如何让这台服务器通过 Proxy 连接到另一台实验室的内网服务器,并进行上网的方式。

本文不对原理做过多阐述,仅仅是贴几个配置。

服务端 (可以联网)

搭建 Proxy Server

可以通过各种手段搭建 Proxy Server,我这里直接用 docker 简单弄了个 clash,并用 yacd 当面板,config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3'

services:
clash:
image: dreamacro/clash
container_name: clash
volumes:
- ./config.yaml:/root/.config/clash/config.yaml
- ./ui:/ui # dashboard volume
ports:
- "7890:7890"
- "9090:9090"
restart: unless-stopped
network_mode: bridge
yacd:
image: haishanh/yacd
container_name: yacd
ports:
- "18080:80"
restart: unless-stopped
network_mode: bridge

至于 config.yaml 怎么配,那自然是不能在这里展开了。

客户端 (无法联网)

1 - shell proxy

1
2
3
4
5
6
export http_proxy="http://<proxy-ip>:7890"
export https_proxy=$http_proxy
export no_proxy="localhost,127.0.0.0/8,10.0.0.0/8"
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy
export NO_PROXY=$no_proxy

将这个放在 ~/.bashrc / ~/.zshrc 等启动配置里即可,这个属于基操

2 - sudo proxy

上面的 shell proxy 作用域只有当前登录用户的 shell, 如果用 sudo apt install 等操作就没法走代理了,因此需要:

1
sudo visudo 

然后加上下面一行配置,表示将当前 shell 的这些环境变量传递到 sudo 中:

1
Defaults env_keep += "http_proxy https_proxy no_proxy HTTP_PROXY HTTPS_PROXY NO_PROXY" 

3 - systemd proxy (docker)

上面的配置无法让 docker pull 走代理,原因在 这篇博客: docker pull 卡住(代理问题) 的解决方案 也详细说过。

需要做的工作:

1
2
sudo mkdir -p /etc/systemd/system/docker.service.d 
sudo vim /etc/systemd/system/docker.service.d/proxy.conf
1
2
3
4
[Service] 
Environment="HTTP_PROXY=http://<proxy-ip>:7890/"
Environment="HTTPS_PROXY=http://<proxy-ip>:7890/"
Environment="NO_PROXY=localhost,127.0.0.1"

最后重启docker:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

4 - ssh proxyjump

上面的代理解决不了 ssh 的问题,因此对于 openssh 7.3 以下,可以:

1
vim ~/.ssh/config

然后配置类似的 ProxyCommand 方案:

1
2
3
4
5
6
7
8
9
10
Host proxyserver
HostName xxx
Port 22
User xxx

Host target
HostName xxx
Port 22
User xxx
ProxyCommand ssh -W %h:%p proxyserver

如果是 openssh 7.3 以上, 直接:

1
2
3
4
5
6
7
8
9
10
Host proxyserver
HostName xxx
Port 22
User xxx

Host target
HostName xxx
Port 22
User xxx
ProxyJump proxyserver

即可


一个相对完整的局域网代理方案
https://moreality.net/posts/29923/
作者
Moreality
发布于
2024年7月6日
许可协议