配置多層NAT和端口映射實現外網訪問內網
- 背景和原理
通過配置NAT可以實現內網中不能直接訪問外網的主機通過NAT代理訪問內網,配置方法這里不再贅述(前文有介紹)。本文以兩層的NAT代理做模擬,通過端口映射實現從外網訪問內網中某一台主機,並實現某一服務(如ftp功能)。端口映射就是將外網主機的IP地址的一個端口映射到內網中一台機器,提供相應的服務。當用戶訪問該IP的這個端口時,服務器自動將請求映射到對應局域網內部的機器上(目的端口必須開放)。
-
環境模擬
在虛擬機中創建三台Linux系統(可以通過克隆創建),分別命名為Linux1、Linux2
和Linux3。其中Linux1和Linux2都具有兩塊網卡,Linux3具有1塊網卡。
對應的網卡ip分配:
Linux1:
eth0(NAT模式) 192.168.214.210(此ip跟VMware的NAT模式同網段,即能直接訪問外網)
eth1(僅主機模式) 192.168.1.254(此ip作為Linux2的網關)
Linux2:
eth0(僅主機模式) 192.168.1.100 網關192.168.1.254
eth1(LAN區段) 192.168.2.254(此ip作為Linux3的網關)
Linux3:
eth0 (LAN區段) 192.168.2.100 網關192.168.2.254
配置相應的NAT代理,使得Linux3可以通過兩級的NAT代理訪問外網
執行命令ping www.baidu.com –c4檢驗
- 配置端口映射
3.1 對於Linux1映射Linux2,在Linux1上指定一個端口(范圍是1024-65536,此處指定為4022),指定映射到Linux2的一個端口(端口范圍相同,此處指定為3022)
在Linux1上執行命令:
iptables -t nat -A PREROUTING -d 192.168.214.210 -p tcp --dport 4022 -j DNAT --to 192.168.1.100:3022
3.2 對於Linux2映射Linux3,在 Linux2上使用端口映射的端口為同一端口即3022,指定映射到Linux3的一個端口(端口范圍相同,此處為了方便,指定Linux3開放的ssh端口51323,便於通過ssh客戶端測試端口映射的連接及分析)
在Linux2上執行命令:
iptables -t nat -A PREROUTING -d 192.168.1.100 -p tcp --dport 3022 -j DNAT --to 192.168.2.100:51323
- 檢驗端口映射及分析
4.1 通過ssh登錄Linux1映射到Linux2再映射到Linux3,最終ssh會通過兩級的端口映射登錄到Linux3,
4.2 在Windows平台(此時相當於外網訪問)使用netstat命令過濾出4022端口的tcp通信,發現外網與Linux1通過4022端口建立起了tcp通信
4.3 在登錄到的Linux3上使用netstat命令過濾出上面步驟得到的52640端口的tcp通信,發現Linux3通過51323端口與外網建立起了tcp通信
4.4 在Linux1上可以通過tcpdump抓包工具抓取端口4022的相關信息
在Linux2上通過tcpdump抓包工具抓取端口3022的相關信息
在Linux3上通過tcpdump抓包工具抓取端口51323的相關信息
可以得出,外網主機192.168.214.1通過其52640端口與Linux3主機192.168.2.100通過51323端口建立了tcp連接,實現了從外網通過端口映射訪問內網主機
- 實際應用舉例:外網通過端口映射ftp登錄到內網的Linux3主機
5.1 在Linux3安裝vsftpd服務端,啟動服務並創建普通用戶及密碼
yum install vsftpd -y
/etc/init.d/vsftpd start
useradd test
echo 123456|passwd --stdin test
5.2 用ftp客戶端登錄。由於只配置了Linux3的51323端口映射,該端口又是ssh使用的端口,ftp默認端口21並沒有配置端口映射,可以使用sftp(SSH File Transfer Protocol)利用ssh端口登錄到Linux3
說明:sftp命令可以通過ssh來上傳和下載文件,是常用的文件傳輸工具,它的使用方式與ftp類似,但它使用ssh作為底層傳輸協議,所以安全性比ftp要好得多
回車登錄成功,可以拖拽文件進行測試
到Linux3的ftp服務的test用戶下查看
博主原創文章,轉載請務必注明出處