从公网连接至内网地址的两个方法

如果贵校(司)和敝校(厂)一样没有一个可用的VPN,公网IPv6地址的话。从外部连接至内部服务器可能会非常头疼。这篇文章我打算简单介绍一下我面对这类问题时的解决方案。

假设有公网地址的机器的IP为:1.2.3.4,内网可以访问外网但是没有公网的机器的IP为:10.101.1.2,只有内网地址无法访问外网的机器的IP为:10.101.1.3,网络图如下:
network-topo

作为一个思想不上进,盲目相信CentOS的运维,本文假设所有的机器都使用了CentOS,且安装了epel-release

有一台有公网地址的机器

无疑,这种情况是最好的,即你拥有1.2.3.4那台机器的使用权(或者至少有iptables的使用权)。这个时候只需要通过iptables(firewalld)把某个端口的流量ROUTING到对应内部机器的SSH端口就是了。(比如把1.2.3.4的2222端口ROUTE到10.101.1.2的22端口。)

先打开内核的转发功能,在/etc/sysctl.conf最后添加一条:

net.ipv4.ip_forward = 1

之后以root用户(或者sudo)执行

firewall-cmd --add-masquerade
firewall-cmd --add-rich-rule 'rule family=ipv4 source address=1.2.3.4 forward-port port=2222 protocol=tcp to-port=22 to-addr=10.101.1.2'
firewall-cmd --reload

从外部连接时使用ssh -p 2222 1.2.3.4即可,很方便没错吧!

没有公网地址但可访问公网

假设你没有1.2.3.4的使用权,但是你的IP(10.101.1.2)可以访问公网,这个时候可以通过Tor HS的方式访问。
由于在国内无法直接连接到Tor网络,首先需要创建一个Socks5代理,这一点我想不用我教了吧。假设这个代理监听在127.0.0.1:1080
安装Tor,在/etc/tor/torrc中任意位置添加一行Socks5Proxy 127.0.0.1:1080并且取消如下行注释变为:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 22 127.0.0.1:22

如果配置没有问题的话,开启Tor后在/var/lib/tor/hidden_service/下查看hostname文件内容,假设是digital4fecvo6ri.onion
在自己电脑上挂上Tor代理之后”ssh digital4fecvo6ri.onion”。


我的博客使用了Disqus评论框,如果你看不到评论框,那么多半Disqus服务在你所在的地区被墙,请使用代理访问。