VMware實現iptables NAT及埠映射

来源:https://www.cnblogs.com/zhanglianghhh/archive/2019/03/24/10589477.html
-Advertisement-
Play Games

1. 前言 本文只講解實戰應用,不會涉及原理講解。如果想要瞭解iptables的工作流程或原理可參考如下博文。 具體操作是在PC機的VMware虛擬機上進行的,因此涉及的地址都是內網IP。在實際工作中也是一樣的操作流程,只需要把涉及外網的地址改為公網IP即可。 文章參考:iptables nat及端 ...


 

1. 前言

本文只講解實戰應用,不會涉及原理講解。如果想要瞭解iptables的工作流程或原理可參考如下博文。

具體操作是在PC機的VMware虛擬機上進行的,因此涉及的地址都是內網IP。在實際工作中也是一樣的操作流程,只需要把涉及外網的地址改為公網IP即可。

 

文章參考:iptables nat及埠映射

文章參考:企業軟體防火牆iptables

 

1.1. 為什麼有這篇文章?

原因是在日常工作中,我們都會在自己的電腦上安裝VMware虛擬機,並由此實現一些業務系統【如:LNMP】或模擬線上的網路環境等。

而本文模擬的就是IDC機房或辦公網的環境。機房內網伺服器不能上外網,只能通過網關伺服器上外網。而外網伺服器想要訪問機房內部的伺服器,也只能通過網關伺服器轉發實現訪問。

 

 

2. iptables表和鏈的工作流程

 

2.1. 常用操作

## 清空所有規則【預設是filter表】
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
## 查看規則
iptables -nL
iptables -nL -t nat
## 刪除指定表指定鏈的指定行數據
iptables -t nat -D POSTROUTING 1 

  

 

3. 涉及虛擬機網路設置

3.1. 內部伺服器node01網路設置

3.1.1. 內網設置【只有一個網卡】

備註:

使用LAN區段,那麼本機登錄該虛擬機也不行,也ping不通,不在同一個網段不能互訪。只能通過網關伺服器ssh跳轉登錄訪問。

 

eth0配置:

[root@InnerNode01 network-scripts]# cat ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPV6INIT=yes
USERCTL=no
IPADDR=172.16.10.10
NETMASK=255.255.255.0
GATEWAY=172.16.10.5
# 阿裡雲DNS
DNS1=223.5.5.5
DNS2=223.6.6.6

  

3.2. 網關伺服器網路設置

3.2.1. 內網設置

備註:

網關伺服器的內網地址和內部伺服器的地址在同一個網段。因此他們之間可以互訪。

 

eth0配置:

[zhang@gateway01 network-scripts]$ cat ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPV6INIT=yes
USERCTL=no
IPADDR=172.16.10.5
NETMASK=255.255.255.0

  

3.2.2. 外網設置【模擬的公網】

eth1配置:

[root@gateway01 network-scripts]# cat ifcfg-eth1 
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPV6INIT=yes
USERCTL=no
IPADDR=10.0.0.5
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
# 阿裡雲DNS
DNS1=223.5.5.5
DNS2=223.6.6.6

  

3.3. 外網伺服器設置

3.3.1. 外網設置【只有一個網卡】

eth0配置:

[root@internet01 network-scripts]# cat ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPV6INIT=yes
USERCTL=no
IPADDR=10.0.0.8
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
# 阿裡雲DNS
DNS1=223.5.5.5
DNS2=223.6.6.6

  

 

4. 簡單的NAT路由器

4.1. 網路架構

 

4.2. NAT需求介紹

網關2個網路介面

Lan口: 172.16.10.5/24    eth0

Wan口: 10.0.0.5/24      eth1

目的:實現內網中的節點伺服器node01  IP:172.16.10.10(網段:172.16.10.0/24)可控的訪問internet。

 

4.3. 網關伺服器操作

1、網關機器開啟linux的轉發功能

[root@gateway01 ~]# tail /etc/sysctl.conf   # 添加如下內容
…………
net.ipv4.ip_forward = 1
[root@gateway01 ~]# sysctl -p   # 生效

  

2、網關機器iptables操作

iptables -P FORWARD DROP

將FORWARD鏈的策略設置為DROP,這樣做的目的是做到對內網ip的控制,你允許哪一個訪問internet就可以增加一個規則,不在規則中的ip將無法訪問internet。

 

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

這條規則規定允許任何地址到任何地址的確認包和關聯包通過。一定要加這一條,否則你只允許lan IP訪問沒有用。

 

iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -j SNAT --to 10.0.0.5

這條規則做了一個SNAT,也就是源地址轉換,將來自172.16.10.0/24的地址轉換為10.0.0.5。

 

有這幾條規則,一個簡單的nat路由器就實現了。這時你可以將允許訪問的ip或網段添加至FORWARD鏈,他們就能訪問internet了。

 

iptables -A FORWARD -s 172.16.10.10 -j ACCEPT		# 允許單個地址  或者如下命令
iptables -A FORWARD -s 172.16.10.0/24 -j ACCEPT		# 允許該網段

比如我想讓172.16.10.10這個地址訪問internet,那麼你就加如上的命令就可以了。

 

3、保存iptables規則

iptables-save > /etc/sysconfig/iptables

  

4.4. 內部伺服器node01測試

[root@InnerNode01 ~]# ping www.baidu.com   # 查看是否可以ping通
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=1 ttl=127 time=43.4 ms
64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=2 ttl=127 time=42.6 ms
64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=3 ttl=127 time=42.1 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 42.114/42.735/43.420/0.561 ms
[root@InnerNode01 ~]# 
[root@InnerNode01 ~]# telnet www.baidu.com 80   # telnet 是否可行
Trying 112.34.112.40...
Connected to www.baidu.com.
Escape character is '^]'.

  

 

5. 埠轉發

5.1. 網路架構

 

5.2. 埠轉發需求介紹

內部機器1個網路介面

Lan內web server: 172.16.10.10:80

 

網關2個網路介面

Lan口:172.16.10.5/24   eth0

Wan口:10.0.0.5/24     eth1

目的:對內部server進行埠轉發,實現internet 10.0.0.8(網段:10.0.0.0/24)用戶【模擬外網機器】訪問內網伺服器172.16.10.10:80。

 

5.3. 網關伺服器操作

1、網關機器開啟linux的轉發功能

[root@gateway01 ~]# tail /etc/sysctl.conf   # 添加如下內容
…………
net.ipv4.ip_forward = 1
[root@gateway01 ~]# sysctl -p   # 生效

  

2、網關機器iptables操作

iptables -P FORWARD DROP

將FORWARD鏈的策略設置為DROP,這樣做的目的是做到ip的控制,你允許哪一個訪問就可以增加一個規則,不在規則中的ip將無法訪問。

 

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

這條規則規定允許任何地址到任何地址的確認包和關聯包通過。一定要加這一條,否則你只允許lan IP訪問沒有用。

 

iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 80 -j DNAT --to 172.16.10.10:80

如果你要把訪問 10.0.0.5:80 的數據包轉發到Lan內web server,用上面的命令。

 

好了,命令完成了,埠轉發也做完了,本例能不能轉發呢?不能,為什麼呢?我下麵分析一下。

本例中我們的FORWARD策略是DROP。那麼也就是說,沒有符合規則的包將被丟棄,不管內到外還是外到內。因此,我們需要加入下麵的規則。

iptables -A FORWARD -d 172.16.10.10 -p tcp --dport 80 -j ACCEPT

 

3、保存iptables規則

iptables-save > /etc/sysconfig/iptables

  

5.4. 操作驗證

1、在內部伺服器監聽80埠

## xshell標簽1操作
[root@InnerNode01 ~]# nc -l 80   # 保持持續監聽
## xshell標簽2操作
[root@InnerNode01 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State    PID/Program name    
tcp        0      0 0.0.0.0:111     0.0.0.0:*        LISTEN   808/rpcbind         
tcp        0      0 0.0.0.0:80      0.0.0.0:*        LISTEN   1971/nc             ### 可見80埠已經監聽成功
tcp        0      0 0.0.0.0:22      0.0.0.0:*        LISTEN   1099/sshd           
tcp        0      0 127.0.0.1:25    0.0.0.0:*        LISTEN   1355/master    

  

2、在外網伺服器Telnet

[zhang@internet01 ~]$ telnet 10.0.0.5 80
Trying 10.0.0.5...
Connected to 10.0.0.5.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

由上可知,外網伺服器(10.0.0.8)訪問內部伺服器(172.16.10.10:80)成功。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先打開vs軟體新建項目創建web中的mvc項目再右擊解決方案創建類庫項目分別創建DAL層和BLL層再把DAL層和BLL層的類重命名在mvc項目中的Models文件夾創建model類在DAL創建ADO.NET實體數據模型後把DAL層中App.Config文件中的鏈接字元串複製到mvc項目的Web.c ...
  • 首先打開vs軟體新建項目創建web中的mvc項目再右擊解決方案創建類庫項目分別創建DAL層和BLL層再把DAL層和BLL層的類重命名在mvc項目中的Models文件夾創建model類在DAL創建ADO.NET實體數據模型後把DAL層中App.Config文件中的鏈接字元串複製到mvc項目的Web.c ...
  • 之前因為學習TensorFlow,所以在自己的Ubuntu上安裝了cuda,cudnn以及Nvidia驅動。但可能是由於自己經常不註重正常關閉自己的Ubuntu,這就導致了一個問題: 某天在查看自己的顯卡信息時,輸入 結果報錯 黑人問好臉???自己之前明明安裝好了Nvidia驅動的呀,怎麼現在就報錯 ...
  • 個人動態功能變數名稱管理系統。Personal DDNS. 來源: "https://www.cnblogs.com/osnosn/p/10591431.html" 來自 "osnosn的博客" 簡單又實用的動態功能變數名稱管理系統, 自建動態功能變數名稱管理系統 使用 bind9 + php + mysql , 創建個人 ...
  • 導語:為什麼要學習linux?學到什麼程度? 大數據技術是運行在集群,且是linux操作系統這樣的集群當中的,所以學習大數據之前,你得先掌握了linux的簡單操作,沒錯,我們不是專門的做linux工作,所以只要學會簡單操作,會用了就行 學習階段不可能專門買四五台伺服器,成本太高了,所以我們就用虛擬化 ...
  • Linux 自動化部署DNS伺服器 1.首先配置主DNS伺服器的IP地址,DNS地址一個寫主dns的IP地址,一個寫從dns的地址,這裡也可以不寫,在測試的時候在/etc/resolv.conf中添加記錄。 2.配置從dns的IP地址 3. 運行腳本,選擇1,部署主DNS伺服器 4.運行完腳本之後, ...
  • 1.linux的體繫結構 體繫結構主要分為用戶態(用戶上層活動)和內核態 內核:本質是一段管理電腦硬體設備的程式 系統調用:內核的訪問介面,是一種不能再簡化的操作 公用函數庫:系統調用的組合拳 shell:命令解釋器,可編程 2.linux下如何查找特定文件 find 3.linux下檢索文件內容 ...
  • 使用yum命令報錯File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 解決辦法: 修改yum配置文件,將python版本指向以前的舊版本 # vi /usr/bin/yum #!/usr/bin/python2.7 修改urlgrabb... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...