我在公司防火墙后面有一台 linux fedora21 客户端笔记本电脑(它允许通过 http 和 https 端口,但不能通过 ssh 22),我在我自己的路由器后面有一个 linux fedora21 服务器。当我指定我的家庭服务器的公共 IP 地址时,使用 https 浏览工作(因为我配置了我的家庭路由器)
是否可以通过 http/s 端口 ssh(远程外壳)到我的家庭服务器?
我看到了一个名为corkscrew. 那会有帮助吗?
opensshd并httpd在家庭服务器上运行。还需要什么配置?
Gil*_*il' 58
什么是可能的取决于防火墙允许什么。
一些防火墙采取简单的方法并允许端口 443 上的任何内容。如果是这种情况,到达您的家庭服务器的最简单方法是让它侦听端口 443 上的 SSH 连接。如果您的机器直接连接到 Internet,只需添加Port 443到/etc/ssh/sshd_config或/etc/sshd_config略低于这一行Port 22。如果您的机器位于重定向传入连接的路由器/防火墙后面,请使用类似的方法将传入连接重定向到端口 443 到服务器的端口 22
iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22
Run Code Online (Sandbox Code Playgroud)
wan0路由器上的 WAN 接口在哪里,10.1.2.3 是家庭网络上服务器的 IP 地址。
如果你想让你的主服务器在 443 端口上同时监听 HTTPS 连接和 SSH 连接,这是可能的——SSH 和 HTTPS 流量很容易区分(在 SSH 中,服务器首先通信,而在 HTTP 和 HTTPS 中,客户端通信第一的)。有关如何设置的教程,请参见http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html和http://wrouesnel.github.io/articles/Setting%20up%20sshttp/使用sshttp,并在端口 80 或 443 上使用 SSH,同时网络服务器 (nginx) 在这些端口上运行
一些防火墙会阻止所有传出连接,但允许通过代理浏览网页,该代理允许HTTPCONNECT方法有效地在防火墙中打孔。该CONNECT方法可能仅限于某些端口,因此您可能需要将其与上述端口 443 上的侦听结合起来。
要使 SSH 通过代理运行,您可以使用corkscrew 之类的工具。在您的 中~/.ssh/config,添加ProxyCommand如下一行,如果您的网络代理是http://web-proxy.work.example.com:3128:
Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p
Run Code Online (Sandbox Code Playgroud)
然后你可以通过运行连接ssh home。
一些防火墙不允许 SSH 流量,即使在端口 443 上也是如此。为了应对这些,您需要伪装或将 SSH 伪装成防火墙允许通过的东西。有关使用proxytunnel执行此操作的教程,请参阅http://dag.wiee.rs/howto/ssh-http-tunneling/。