iptables nat 表應用
上圖的操作,說白了就是要做一個路由器,路由器可以上網,電腦就可以上網。
先操作一下前期準備,打開虛擬機,將兩個Linux窗口打開,然後分別拍一張快照,命名為“iptables 小實驗前”。此舉是方便實驗過程出現不可挽回的錯誤,可以通過快照恢復,然後重新做實驗。lyslinux-02 是之前克隆的虛擬機。
右擊上圖紅色框框 “編輯虛擬機設置” 的位置 ,跳出彈框,選擇“添加”,網絡適配器,下一步,見下圖,
保持默認,點擊“完成”,見下圖,
接著按下圖箭頭指示操作,見下圖,
這邊選擇“LAN 區段”,相當於給這個網卡連到了一個內網的交換機上,Windows機器和這個交換機是連不上的。這樣的話,這臺機器和另一臺的機器連上同一個內網的交換機,它們兩者之間就可以通信了。
這個機器的網卡就添加好了。
接著操作另一臺機器的網卡,右擊上圖紅色框框 lyslinux-02 的位置 ,選擇“設置”,跳出彈框,選擇“添加”,網絡適配器,下一步,見下圖,
操作完畢,點擊“完成”,見下圖,
然後往下操作,選擇“網絡適配器2”,在“LAN 區段”這邊選擇剛剛設置的 LYS ,再點擊“確定”,見下圖,
以上操作就是為了讓這兩臺機器,選擇同一個交換機。
準備工作做好了,下面就是啟動這兩臺機器。啟動完成之後,使用 PuTTY 遠程登錄lyslinux-01,輸入命令 ifconfig ,回車,見下圖,
上圖紅色框框的內容,就是剛剛增加的網卡,現在要給 ens37 這個網卡配置一個 IP。我們可以通過命令行給 ens37 添加 IP ,也可以設置配置文件,設置配置文件和設置虛擬網卡的步驟是一樣的。將 ens33 的網卡配置文件復制一份到 ens37 裏面,然後進入配置文件修改 IP、NETMASK 就可以,不用設置 DNS 和網關這些。更改配置文件的方式比較復雜,這邊演示比較簡單的方法,輸入命令 ifconfig ens37 192.168.100.1/24 ,回車,見下圖,
可以看到,成功的給網卡 ens37 配置了 IP 。當然這個 IP 一重啟就會失效,要想 IP 永久生效,就需要編輯配置文件。
對於另一臺機器,因為剛剛把網絡連接關閉了,無法遠程登錄,所以要回到虛擬機上操作,見下圖,
使用 ifconfig 命令還可以看到 ens33 這個網卡的 IP,它雖然在,但還是不能連接網絡的,為了保險起見,使用命令 ifdown ens33 來關閉掉,見下圖,
這樣就看不到 ens33 的 IP 了。同樣的方法,現在給這臺機器的 ens37 網卡設置 IP,見下圖,
IP 設置成功。現在來測試一下,連接一下lyslinux-01 這臺機器的網絡,輸入命令 ping 192.168.100.1 ,回車,見下圖,
上圖顯示網絡沒有連接成功,應該是 lyslinux-01 這臺機器的網絡有點問題,回到 PuTTY 上查看一下,見下圖,
發現 ens37 的IP地址又不見了,這時候要重新給它配置 IP ,見下圖,
然後再回到虛擬機上去連接網絡,見下圖,
可以看到網絡連接成功了。
接著去 lyslinux-01 這臺機器上連接 lyslinux-02的網絡,輸入命令 ping 192.168.100.100 ,回車,見下圖,
也可以連接網絡了。
現在總結一下,這個nat表應用的準備工作:
01機器兩塊網卡 ens33(192.168.218.128)、ens37(192.168.100.1),ens33 可以上外網,ens37僅僅是內部網絡,02機器只有ens37(192.168.100.100),和01機器ens37可以通信互聯。
現在來檢查一下,Windows 的 cmd 能不能連接這兩個 IP,見下圖,
可以看到,都是不能連接的。現在來看一下 lyslinux-02 機器不能連接 192.168.218.128,也不能連接 192.168.218.1 ,也不能上外網,見下圖,
可以看到也都是不行的。
為了實現需求1:可以讓02機器連接外網。
在01機器上操作,這個文件 /proc/sys/net/ipv4/ip_forward 裏面的內容,默認是 0,表示它沒有開啟內核轉發,需要改成 1 。打開路由轉發,輸入命令 echo "1">/proc/sys/net/ipv4/ip_forward ,回車,即可將文件更改為 1 。見下圖,
以上操作叫做打開端口轉發。
接著在01機器上增加一條規則,執行命令 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE ,回車,見下圖,
有了這條規則,才可以實現 192.168.100.0 這個網段上網。
接下來在02機器上設置網關為 192.168.100.1 ,輸入命令 route add default gw 192.168.100.1,回車,見下圖,
設置完成後,也可以實現連接 192.168.218.1 這個網卡。這意味02機器可以跟外網相通了。
接著設置一下 DNS,看看能不能聯網,輸入命令 vi /etc/resolv.conf ,回車,見下圖,
輸入上圖紅色框框的內容,保存後退出。119.29.29.29 是公共的 DNS,然後來看一下能不能連接,見下圖,
發現是可以連接的,也可以連接外網。
到這邊,我們的目的就達到了,讓02機器也可以連接外網。現在在Windows上面使用cmd來查看一下,見下圖,
發現Windows還是不能連接 192.168.100.100 。這邊可以將01機器理解為路由器,02機器是手機、電腦等可以聯網的機器。
需求2:03機器只能和01機器通信,讓03機器可以直接連通02機器的22端口。這步操作叫 端口映射。
目前為止,02機器還只能在虛擬機上操作,不能遠程登錄。現在來實現02機器的遠程登錄,01機器上打開路由轉發,同樣的, echo "1">/proc/sys/net/ipv4/ip_forward 這個命令上面已經操縱過,所以這一步省略。接著往下操作,我們需要把之前的規則刪除掉,以免影響到後面的操作,輸入命令 iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE ,回車,見下圖,
接著在01機器上增加兩條規則,執行命令 iptables -t nat -A PREROUTING -d 192.168.218.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22,回車。這個命令做一個端口轉發,將目標IP 192.168.218.128 和端口 1122,轉到IP 192.168.100.100 和端口 22,這邊操作的是進去的包。還有一個回來的包,執行命令 iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.218.128 ,回車。這個命令將原IP 192.168.100.100 改成目標IP 192.168.218.128 。見下圖,
以上操作完成之後,還需要在02機器上設置網關為 192.168.100.1,這一步前面也操作過了,這邊也可以省略。
以上操作完成之後,就可以通信了。現在來驗證一下,新建一個PuTTY回話窗口,具體操作見下圖,
作為測試的窗口,其他地方就不做設置了。接著打開新的PuTTY窗口 test100,見下圖,
這邊選擇“是(Y)”,接著登錄上去,查看IP,見下圖,
可以看到ens37的IP是 192.168.100.100 ,接著看看能不能連接外網,見下圖,
此時的Windows還是不能連接 192.168.100.100 ,見下圖,
2、iptables 規則備份和恢復
正常情況下,使用命令 service iptables save ,會把規則保存到 iptables 的配置文件中 /etc/sysconfig/iptables 。如果不想保存在配置文件中,可以使用重定向命令,將規則重定向到一個文件中,文件名可以隨意命名。見下圖,輸入命令 iptables-save > /tmp/ipt.txt ,回車,
上面保存成功之後,可以看到nat表裏面才有規則,filter表裏面是空的。
先將規則清除掉,輸入命令 iptables -t nat -F,回車,見下圖,
恢復剛才的備份,使用命令 iptables-restore < /tmp/ipt.txt ,restore 和 save 正好是相反的。
要想重啟系統之後,就能馬上加載規則,最好還是把規則保存在配置文件 /etc/sysconfig/iptables 中。
iptables nat 表應用