詳解iptables轉發

一、iptables轉發命令

iptables是一個用於Linux系統的防火牆工具,可以通過它來進行流量控制。其中,轉發是iptables最常用的功能之一。針對轉發操作的命令主要有以下:

# 顯示當前的iptables轉發規則
iptables -L -n -t nat 

# 清空所有規則
iptables -F 

# 開啟埠轉發功能
sysctl net.ipv4.ip_forward=1 

# 固化開啟的埠轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward 

# 關閉埠轉發功能
sysctl net.ipv4.ip_forward=0 

# 給指定的IP地址設定埠轉發規則
iptables -t nat -A PREROUTING -s 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80

# 給所有請求設定埠轉發規則
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80

# 刪除指定的規則
iptables -t nat -D PREROUTING 1

二、iptables轉發請求

iptables轉發請求指將到達本機的數據包轉發到其他主機。這種請求可以分為兩種,一種是轉發本地請求,另一種是轉發外部請求。

當本機需要轉發請求時,需要設置PREROUTING表項。例如,將內網的80埠請求轉發到本機的8080埠:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

當需要轉發外部請求時,需要設置POSTROUTING表項。例如,在本機設置網關為192.168.1.1後,需要將外網的請求通過本機轉發到內網的192.168.1.100:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.1

三、iptables轉發所有請求

將所有請求轉發到指定的地址,可以使用如下命令:

iptables -t nat -I PREROUTING -j DNAT --to-destination 10.0.0.1

此時,所有請求都會被轉發到10.0.0.1。

四、iptables轉發規則

iptables轉發規則是一些針對請求的匹配規則,可以用於過濾請求或者將請求轉發到指定的地址。轉發規則可以分為PREROUTING、POSTROUTING和OUTPUT三個表項。常用的規則有:

# 外網請求通過本機轉發到內網
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.1

# 將訪問本機的80埠請求轉為8080埠
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# 允許請求通過本機轉發轉到其他的主機
iptables -t nat -A PREROUTING -s 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80

五、iptables轉發記錄

iptables可以記錄所有轉發請求的信息,可以使用以下命令打開記錄功能:

iptables -I FORWARD -j LOG --log-prefix "iptables_forward: "

記錄的信息可以在/var/log/messages或者/var/log/syslog中查看。

六、iptables轉發埠

iptables可以將到達本機的請求埠轉發到其他主機的指定埠,可以使用以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:8080

此時,所有80埠請求都會被轉發到10.0.0.1的8080埠。

七、iptables轉發udp

和TCP請求一樣,iptables也可以轉發UDP請求。只需要將命令中的tcp替換為udp即可:

iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53

八、iptables轉發流量

可以利用iptables轉發流量的特性進行負載均衡的操作。例如,將一個埠的請求分配到多個伺服器上:

# 首先,記錄IP在當天的連接數,並添加規則
iptables -t nat -N ROUTE
iptables -t nat -I PREROUTING -p tcp --dport 80 -j ROUTE

# 對記錄的IP按照HASH演算法進行負載均衡
iptables -t nat -A ROUTE -m state --state NEW -m hashlimit --hashlimit-name webserver --hashlimit-mode srcip --hashlimit-upto 4 --hashlimit 3/hour --hashlimit-burst 5 -j DNAT --to-destination 192.168.1.1:80

iptables -t nat -A ROUTE -m state --state NEW -j DNAT --to-destination 192.168.1.2:80
iptables -t nat -A ROUTE -j RETURN

九、iptables埠轉發

iptables也可以進行埠映射,將本機的某一個埠映射到另一個主機的指定埠。可以使用以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.1:80

此時,本機的8080埠就可以訪問到10.0.0.1的80埠了。

十、iptables轉發無效

有時候,在進行iptables轉發時會出現無法轉發的情況。可以檢查以下幾個方面:

1、是否開啟了埠轉發功能

sysctl net.ipv4.ip_forward

2、是否有防火牆或其他安全軟體攔截了請求

3、是否設置了正確的轉發規則

4、是否和其他的iptables規則產生衝突

檢查以上幾個方面,基本上就可以解決iptables轉發無效的問題了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/250697.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 13:29
下一篇 2024-12-13 13:29

相關推薦

  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25

發表回復

登錄後才能評論