我是一名大学生。学校有一条奇怪的规定,午夜 12 点后,内部 LAN 将被禁止。这意味着我坐在房间里时可以连接到互联网(外部流量),但无法通过 LAN 访问大多数内部服务器(例如 B),只有一台服务器(例如 A)除外。我可以 ssh 到那台机器(A)并 ping 其他内部服务器(B),甚至可以 ssh 到它们。
我的大学有自己的托管镜像(B),适用于各种发行版(http://mirror.cse.iitk.ac.in)。我已经配置了软件包管理器来使用这个镜像,在白天,它运行完美,下载速度高达 10+ MB/s(它是 LAN),但在 LAN 禁令生效的晚上,我不得不使用其他印度镜像来下载/更新软件包,与前者相比,速度慢得可怜。
我想要实现的是编写一个脚本,将流量从服务器 A 路由到我的本地计算机,因为即使在 LAN 禁令期间,A 也可以访问镜像 (B)。我在 Google 上搜索过,但没有找到我想要的东西。简而言之,我想设置一个类似反向代理的东西,通过路由来自 A 的流量使我的本地计算机访问镜像 (B)。
有可能吗?我还是个新手,正在学习。任何帮助我都会非常感激。
提前致谢!
答案1
让我们涵盖所有可能的基础。
方法 1
首先,对于镜像。mirror.cse.iitk.ac.in
是一个外部镜像,并且具有外部 IP。这意味着您可以使用外部 IP 地址访问它。在撰写本文时,它解析为202.3.77.108
。在镜像配置文件中使用它,您应该获得与 LAN 一样好的速度(根据我的经验)。
方法 2
现在,转到服务器 A(我假设是webhome.cc.iitk.ac.in
)。使用ssh tunnel
。简而言之:
ssh -L8000:mirror.cse.iitk.ac.in:80 <username>@webhome.cc.iitk.ac.in
保持上述 ssh 运行(你可以使用 -N 和 -f 的组合来取消该命令的进程)。现在,在你的配置文件中,而不是
http://mirror.cse.iitk.ac.in/
使用
http://localhost:8000/
当我了解到端口转发时,我写了一篇关于端口转发的文章。所以这应该有助于理解上述工作原理。
评论
下一个疑问(根据我的经验)是关于ssh
在后台保持连接(断开连接时重新连接)。考虑在 .ssh/config 文件中添加 KeepAlive、ServerAliveInterval 参数 ;)
编辑
我注意到您在评论中说端口转发是不可能的,因为您没有服务器上的 root 访问权限。出于多种原因,上述命令不需要服务器上的 root 访问权限。
- 该端口映射到您的计算机上(而不是服务器上)。即您最终将会监听
localhost:8000
。 - 监听大于 1024(在本例中为 8000)的端口无论如何都不需要 root 访问权限。
笔记
如果这是 https,您将把请求转发到 mirror.cse.iitk.ac.in 的端口 443(而不是 80)。
请求如下:
YOU --> localhost:8000 (your PC) --via-ssh-tunnel-> webhome (forwards it to mirror:80) --> mirror.cse.iitk.ac.in (and then the reverse)