本文最后更新于 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 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
等操作就没法走代理了,因此需要:
然后加上下面一行配置,表示将当前 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 以下,可以:
然后配置类似的 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
|
即可