找回密码
 注册会员
搜索

本文来自

Linux

Linux

订阅|关注

请添加对本版块的简短描述

297

主题

314

帖子

2343

积分

管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
2343

[教程] 利用iptables进行端口数据包转发

[复制链接]
跳转到指定楼层
楼主
37070 xiaoxiao 发表于 2015-11-25 22:30:39
关于CentOS 7系统:需要删除firewalld装回iptables.
# 安装命令:
systemctl stop firewalld.service
systemctl disable firewalld.service
yum install iptables-services -y
systemctl enable iptables.service




第一步:开启系统的转发功能:
首先,先确认服务器是否已开启转发,运行:
sysctl net.ipv4.ip_forward
# 如果已经启动则显示
> net.ipv4.ip_forward = 1
# 如果没有启动则显示(请按照下面步骤进行开启)
> net.ipv4.ip_forward = 0


# CentOS 6/Debian/Ubuntu 开启方式:
  1. echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  2. sysctl -p
复制代码


# CentOS 7 开启方式:
  1. echo "net.ipv4.ip_forward = 1" >> /usr/lib/sysctl.d/cloudiplc.conf
  2. sysctl -p /usr/lib/sysctl.d/default.conf
复制代码




第二步: 加入iptables规则:
iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A PREROUTING -p udp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]
* 如服务器是内网IP(例如NAT-VPS),请用ifconfig或ip addr确认走公网流量网卡的内网IP(本地服务器IP).



第三步:重启iptables使规则生效:
CentOS使用:
service iptables save
service iptables restart

Debian/Ubuntu使用:
iptables-save > /etc/iptables.up.rules
iptables-restore < /etc/iptables.up.rules


==============================
扩展需求:
CentOS修改:/etc/sysconfig/iptables
Debian/Ubuntu修改:/etc/iptables.up.rules
==============================

同端口号配置方案:
使用本地服务器的10000端口来转发目标IP为1.1.1.1的10000端口
-A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1
-A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1
-A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000 -j SNAT --to-source [本地服务器IP]
-A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000 -j SNAT --to-source [本地服务器IP]
============================================================
非同端口号配置方案:
使用本地服务器的60000端口来转发目标IP为1.1.1.1的50000端口
-A PREROUTING -p tcp -m tcp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
-A PREROUTING -p udp -m udp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
-A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 50000 -j SNAT --to-source [本地服务器IP]
-A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 50000 -j SNAT --to-source [本地服务器IP]
============================================================
多端口转发配置方案:
将本地服务器的10000~65535转发至目标IP为1.1.1.1的10000~65535端口
-A PREROUTING -p tcp -m tcp --dport 10000:65535 -j DNAT --to-destination 1.1.1.1
-A PREROUTING -p udp -m udp --dport 10000:65535 -j DNAT --to-destination 1.1.1.1
-A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000:65535 -j SNAT --to-source [本地服务器IP]
-A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000:65535 -j SNAT --to-source [本地服务器IP]
============================================================
本地多IP,转发到不同IP配置方案:
将本地服务器IP为1.1.1.1的10000~65535端口转发至指定目标IP为10.10.10.10的10000~65535端口
将本地服务器IP为2.2.2.2的10000~65535端口转发至指定目标IP为20.20.20.20的10000~65535端口

-A PREROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000:65535 -j DNAT --to-destination 10.10.10.10
-A PREROUTING -d 1.1.1.1 -p udp -m udp --dport 10000:65535 -j DNAT --to-destination 10.10.10.10
-A POSTROUTING -d 10.10.10.10 -p tcp -m tcp --dport 10000:65535 -j SNAT --to-source 1.1.1.1
-A POSTROUTING -d 10.10.10.10 -p udp -m udp --dport 10000:65535 -j SNAT --to-source 1.1.1.1
-A PREROUTING -d 2.2.2.2 -p tcp -m tcp --dport 10000:65535 -j DNAT --to-destination 20.20.20.20
-A PREROUTING -d 2.2.2.2 -p udp -m udp --dport 10000:65535 -j DNAT --to-destination 20.20.20.20
-A POSTROUTING -d 20.20.20.20 -p tcp -m tcp --dport 10000:65535 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -d 20.20.20.20 -p udp -m udp --dport 10000:65535 -j SNAT --to-source 2.2.2.2
============================================================


最后,修改后重启生效:
CentOS6:
service iptables restart

CentOS7:
systemctl restart iptables.service

Debian/Ubuntu:
iptables-restore < /etc/iptables.up.rules




回复

使用道具 举报

快速回复 返回顶部 返回列表