Linux iptables 端口转发

(1)关于 PREROUTING和POSTROUTING, SNAT和DNAT 的理解
如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;
反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。

SNAT对应的链是 POSTROUTING
DNAT对应的链是PREROUTING

说明:

PREROUTING和POSTROUTING指的是数据包的流向。
POSTROUTING一般指的是发往公网的数据包,PREROUTING 一般指来自公网的数据包。

POSTROUTING是源地址转换,要把你的内网地址转换成公网地址才能让你上网。
PREROUTING是目的地址转换,要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的机器。

PREROUTING 当外网的数据包进入到内网时,我们需要修改数据包中的公网IP为内网的主机 IP,这种DNAT的行为规则就要在PREROUTING链里添加。
POSTROUTING和 PREROUTING不同,在执行SNAT任务时的行为规则就添加在POSTROUTING链中。

落实到网卡上,对于每个网卡数据流入的时候必然经过PREROUTING,数量流出必然经过POSTROUTING 。

Linux  iptables 端口转发

(2) 场景应用举例
场景 : 来自 222.186.169.233:5959访问的 数据流 转发到 国外103.82.143.3:80

首先保证场景中用到的端口对外是开放状态,是真实存在的端口

经过分析只需要在222.186.169.233 服务器上做就可以了

1 . 把原来的规则清空干净

# iptables -t nat -F POSTROUTING

# iptables -t nat -F PREROUTING

2 .在国内服务器222.186.169.233 上执行如下操作:

# echo 1 > /proc/sys/net/ipv4/ip_forward 启用网卡转发功能
# sysctl -p

# iptables -t nat -A PREROUTING -d 222.186.169.233 -p tcp --dport 5959 -j DNAT --to-destination 103.82.143.3:80

# iptables -t nat -A POSTROUTING -d 103.82.143.3 -p tcp --dport 80 -j SNAT --to-source 222.186.169.233:5959

3.保存好规则

3.1: centos系统

# service iptables save

# service iptables restart

3.2: ubuntu 系统

# apt-get install iptables

# sudo sh -c "iptables-save" > /etc/network/iptables.up.rules

# iptables-restore < /etc/network/iptables.up.rules

# sudo iptables-apply

# vi /etc/network/if-pre-up.d/iptables #创建文件,添加以下内容

#!/bin/bash
iptables-restore < /etc/network/iptables.up.rules
使防火墙开机启动

# chmod +x /etc/network/if-pre-up.d/iptables 添加执行权限

# iptables -L -n 查看规则是否生效.

参考文档:https://blog.csdn.net/light_jiang2016/article/details/79029661

相关新闻

联系我们

全国服务热线

400-033-9553

电子邮件:admin@example.com
工作时间:09:00-17:00 周一至周五

在线客服
关注微信
关注微信
分享本页
返回顶部