网络被限制了还怎么能摸鱼?

一,问题

相信大部分公司的网络,比较正规的,或多或少会有限制你的访问外网的措施。对于摸鱼族来说,用公司的电脑摸鱼很容易被审计到,因此,家里放一台摸鱼专用虚拟机是最好的,比如答主就是远程到家里的机器写文章...

大家都知道,通过ssh+proxifier可以无所不能,可是问题来了,如果你所处的网络只能访问80和443的端口,那么该怎么办?

只要这个443端口能直接连,那么一个比较可行的办法就是将ssh的22端口变成443,不过,你就失去了提供web服务器的能力,那么,有什么办法能让443端口复用?比如ssh连接到服务器端口的443时,会代理定向连接到22端口的ssh服务,而普通浏览器访问443时,则返回普通的网页相应。

网络被限制了还怎么能摸鱼?插图

这个就要请出我们的nginx了。根据这个官方blog的解释,

https://www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/

1.15.2版本开始,就提供了这么一个能力,并给出了一个参考配置

stream {
    upstream ssh {
        server 192.0.2.1:22;
    }
    upstream web {
        server 192.0.2.2:443;
    }
    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" web;
    }
    # SSH and SSL on the same port
    server {
        listen 443;
        proxy_pass $upstream;
        ssl_preread on;
    }
}

答主我这种小白,看了上面参考配置,基本是非常蒙蔽的。这个配置怎么能部属到我现在的nginx配置中呢?为此,我进行了各种查询,资料并不多。接下来通过我的Try and Error,终于把事情搞明白了。

二,解决方案

答主的服务器使用的是Debian 11.0系统,使用Debian自带的nginx包。大家都知道,Linux各种发行版都有自己的个性,各种配置文件,以及各种配置文件的写法都各不相同。Debian就是一个很好的例子,你如果理解了它的配置规律,那么各种配置将如鱼得水。相反,你拿Redhat那一套套用到Debian上,将不知所云。

如果将上面的配置直接拷贝到/etc/nginx.conf,那自然是不work的,别我问为什么。事实上,连nginx启动都不能。

nginx从1.15.2开始,引入了一个变量,$ssl_preread_protocol,这个变量可以用来区分SSL/TLS协议或者其他协议。自然,ssh进行连接时,这个变量是空,而普通的https访问,这个变量就有对应的版本值。知道这个就好办了。

一般情况下,刚刚装好的系统,sshd监听22端口,nginx则监听443端口,两者井水不犯河水。各玩各的。

网络被限制了还怎么能摸鱼?插图1

那么怎么能将连接到443的ssh stream代理到本机去呢?我们将上面的图修改一下。

网络被限制了还怎么能摸鱼?插图2

stream中的server配置监听443,而原先的server配置退居后台,比如我将它配置成监听8443。这样子,stream的443服务器将进来的协议进行分类,如果是SSL/TLS,则代理到8443,原来的https服务器去。如果是空,我们则代理到本机的22端口。

相信大家看了上面的图,就会豁然开朗!官方的blog都没有类似的图,导致答主打破脑袋也想不出来应该怎么搞。

stream {
    upstream ssh {
        server 127.0.0.1:22;
    }
    upstream web {
        server 127.0.0.1:8443;
    }
    map $ssl_preread_protocol $upstream {
        "" ssh;
        default web;
    }
    server {
        listen 443;
        ssl_preread on;
        proxy_pass $upstream;
    }
}

重新修改配置,将配置改成上面的样子。首先定义了两个upstream,本机的ssh和web,然后根据$ssl_preread_protocol 变量的值,决定代理到哪里去。

最后的server块,就是新的服务器。而我们以前监听443的server块,需要将端口改成8443即可。理解了之后很简单。

3. 总结

经过上面的配置,用ssh客户端连接443端口则ssh接入。而通过浏览器访问443端口,则返回网页。一举两得!最后要说的是,xshell客户端貌似有问题,ssh连接上之后不会出现用户名密码输入界面,然后超时断开。换用其他客户端就没有这个问题。不知道是谁的bug了。

这样子,你要是连上限制了端口访问的网络,比如某星爸爸免费wifi之类的,你也可以轻松通过ssh访问家里的机器了。自然,你要是用这个办法来摸鱼,自然更不在话下。

版权声明:本文采用知识共享 署名4.0国际许可协议BY-NC-SA 进行授权
文章作者:jiuhucn
文章链接:https://www.jiuhucn.com/2022/02/24/602.html
免责声明:本站为资源分享站,所有资源信息均来自网络,您必须在下载后的24个小时之内从您的电脑中彻底删除上述内容;版权争议与本站无关,所有资源仅供学习参考研究目的,如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站为非盈利性站点,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>