從公網連接至內網地址的兩個方法

如果貴校(司)和敝校(廠)一樣沒有一個可用的 VPN,公網 IPv6 地址的話. 從外部連接至內部服務器可能會非常頭疼. 這篇文章我打算簡單介紹一下我面對這類問題時的解決方案.

假設有公網地址的機器的 IP 為:1.2.3.4,內網可以訪問外網但是沒有公網的機器的 IP 為:10.101.1.2,只有內網地址無法訪問外網的機器的 IP 為:10.101.1.3,網絡圖如下:

作為一個思想不上進,盲目相信 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”.