iptables 设置端口转发/映射
网络拓扑

服务器A有两个网卡
内网ip:192.168.1.3
外网ip:10.138.108.103
本地回环:127.0.0.1
服务器B有网卡,8001提供服务
内网ip:192.168.1.1
目的
使用户通过外网10.138.108.103:8001访问内网服务器192.168.1.1:8001
思路

如图2所示,端口转发走的是下发A路,利用nat表中prerouting做dnat,用postrouting做snat
包分析
时期 |
操作 |
源IP:PORT |
目的IP:PORT |
packet in |
用户访问 |
1.2.3.4:5 |
10.138.108.103:8001 |
prerouting |
dnat |
1.2.3.4:5 |
192.168.1.1:8001 |
routing decision |
判断是否转发 |
1.2.3.4:5 |
192.168.1.1:8001 |
postrouting |
snat |
10.138.108.103:X |
192.168.1.1:8001 |
packet out |
转发包 |
10.138.108.103:X |
192.168.1.1:8001 |
开启内核ip转发
nano /etc/sysctl.conf
将下项注释去掉
使改动生效
sudo sysctl -p
脚本
#!/bin/bash
pro='tcp'
src_host1='192.168.1.3'
src_host2='10.138.108.103'
src_port=8001
Dst_Host='192.168.1.1'
Dst_Port=8001
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -A PREROUTING -p $pro -d $src_host1 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
iptables -t nat -A PREROUTING -p $pro -d $src_host2 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
iptables -A FORWARD -p $pro -d $Dst_Host --dport $Dst_Port -j ACCEPT
iptables -t nat -A OUTPUT -p $pro -d $src_host1 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
iptables -t nat -A OUTPUT -p $pro -d $src_host2 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port
iptables -t nat -A POSTROUTING -p $pro -d $Dst_Host --dport $Dst_Port -j SNAT --to $src_host1
iptables -t nat -L -n --line-number
|