一、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