1. 程式人生 > >Linux 通過rinetd埠轉發來訪問內網服務

Linux 通過rinetd埠轉發來訪問內網服務

可以通過埠對映的方式,來通過具有公網的雲伺服器 ECS 訪問使用者名稱下其它未購買公網頻寬的內網 ECS 上的服務。埠對映的方案有很多,比如 Linux 下的 SSH Tunnel、rinetd,Windows 下的 portmap 等,本文簡要介紹 rinetd,和 ssh tunnel 的配置方法。

說明:本文相關配置和說明僅用於示例和操作指引,阿里雲不對相關操作結果及由此產生的問題負責。

 

rinetd 配置方法


如果是 Ubuntu 系統,可以直接使用如下指令安裝:

 
  1. apt-get install rinetd -y

下面介紹原始碼安裝配置方法:

1. 下載解壓 rinetd 軟體包:

 
  1. wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd

2. 修改編譯配置: 

 
  1. sed -i s/65536/65535/g rinetd.c# 修改埠範圍,否則會報錯

3. 編譯安裝:

 
  1. mkdir /usr/man&&make&&make install

4. 建立配置檔案: 

 
  1. cat >>/etc/rinetd.conf <>/etc/rc.local # allow 192.168.2.# deny 192.168.1.# bindadress bindport connectaddress connectport0.0.0.0 3306 example.rds.aliyuncs.com 3306logfile /var/log/rinetd.logendecho rinetd >>/etc/rc.local

 

5. 使用:

rinetd 啟動後,就已經可以通過雲伺服器的 3306 埠連線到處於內網模式的 example rds 資料庫了。除了這個場景,其它的內網埠轉發配置也類似。不過,由於FTP 協議埠是隨機的,所以無法通過此方法實現轉發。

另外,配置檔案中可以對某個 IP 或者 IP 段進行允許/拒絕,藉此提高內網埠的安全性。

 

SSH Tunnel 配置方法


通過putty 和 有公網 IP 的 ECS 之間建立 SSH 隧道,然後通過本地埠轉發,實現在客戶 PC 終端上對內網 ECS 和 RDS 的直接訪問,為客戶的遠端管理提供了巨大的方便。

其資料流向如下示意圖: 
1.png

前置條件

  • 客戶 PC 終端可以 ssh 登入有公網的 ECS 伺服器。
  • 有公網的 ECS 伺服器可以通過內網訪問其他內網 ECS 伺服器。
  • 有公網的 ECS 伺服器可以通過內網訪問 RDS(ECS 的內網 IP 在 RDS 的白名單中)。

客戶端配置

1. 客戶端使用 putty,填寫有公網 ECS 的 IP 及 ssh 埠

2.png

2. 設定 SSH Tunnel:Source Port 是 PC 本地監聽的埠,Destination 填寫內網 ECS 伺服器的內網地址及埠。然後點選 Add,就會生成一個埠轉發記錄,然後點選 Open 會開啟 SSH 連線:

3.png

3. 在彈出的視窗中輸入正常 SSH 登入有公網 IP 的 ECS 伺服器:

4.png

4. 這時在客戶 PC 終端上使用 netstat –na 命令應該可以看到一個 127.0.0.1 的 22 埠的本地監聽:

5.png

5. 通過連線這個本地埠就可以連線到內網的 ECS 伺服器上了:

 6.png

6. 這個方法同樣適用於 Windows系統(為了不與客戶 PC 終端的埠衝突,這裡使用了 33389 埠作為本地監聽埠)

7.png

8.png

7. 內網的 RDS 也可以實現:

9.png

 

10.png

8. 可以在客戶 PC 終端直接使用資料庫客戶端程式來連線 RDS 中的資料庫,非常方便。

11.png

另外,在 SecureCRT 中這個功能叫做 埠轉發 ,進行類似的配置後也可以實現同樣的功能。

12.png