一、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转发无效的问题了。