iptables实现tcp端口转发

iptables实现tcp端口转发

1.打开内核的forward功能

# sysctl -A | grep 'net.ipv4.ip_forward'
net.ipv4.ip_forward = 0

如果为0,需要改成1
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

要使其失效做如下操作
# sysctl -p


2.设置端口转发

#!/bin/bash
pro='tcp'
NAT_Host='Host_A'
NAT_Port=8080
Dst_Host='Host_B'
Dst_Port=80
iptables -t nat -A PREROUTING  -m $pro -p $pro --dport $NAT_Port -j DNAT --to-destination $Dst_Host:$Dst_Port
iptables -t nat -A POSTROUTING -m $pro -p $pro --dport $Dst_Port -d $Dst_Host -j SNAT --to-source $NAT_Host

查看规则
iptables -L -t nat

保存规则
iptables save
chkconfig iptables on
sudo chkconfig --list iptables
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off

3.数据包流经过程

A -> B -> C -> B -> A
  • 比如从A发出的数据包如下
Destion Source
DstB:PortB SrcA:PortA
  • B在PREROUTING链修改后数据包如下
Destion Source
DstC:PortC SrcA:PortA
  • B在POSTROUTING链修改后数据包如下
Destion Source
DstC:PortC SrcB:PortA
  • C处理数据包之后返回如下
Destion Source
DstB:PortA SrcC:PortC
  • B的数据包处理
Destion Source
DstA:PortA SrcB:PortB

标签:Linux