Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1836172
  • 博文数量: 636
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3950
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-06 21:58
个人简介

博客是我工作的好帮手,遇到困难就来博客找资料

文章分类

全部博文(636)

文章存档

2024年(5)

2022年(2)

2021年(4)

2020年(40)

2019年(4)

2018年(78)

2017年(213)

2016年(41)

2015年(183)

2014年(66)

我的朋友

分类: 系统运维

2017-02-07 18:37:45

1.一对一流量完全DNAT

首先说一下网络环境,普通主机一台做防火墙用,网卡两块

eth0 192.168.0.1  内网

eth1 202.202.202.1 外网

内网中一台主机 192.168.0.101

现在要把外网访问202.202.202.1的所有流量映射到192.168.0.101上

命令如下:


[xhtml] view plain copy
  1. #将防火墙改为转发模式  
  2. echo 1 > /proc/sys/net/ipv4/ip_forward  
  3. iptables -F  
  4. iptables -t nat -F  
  5. iptables -t mangle -F  
  6. iptables -X  
  7. iptables -t nat -X  
  8. iptables -t mangle -X  
  9.   
  10. iptables -A INPUT -i lo -j ACCEPT  
  11. iptables -A OUTPUT -o lo -j ACCEPT  
  12.   
  13. iptables -P INPUT ACCEPT  
  14. iptables -P OUTPUT ACCEPT  
  15. iptables -P FORWARD ACCEPT  
  16.   
  17. iptables -t nat -A PREROUTING -d 202.202.202.1 -j DNAT --to-destination 192.168.0.101  
  18. iptables -t nat -A POSTROUTING -d 192.168.0.101 -j SNAT --to 192.168.0.1  


2.多对多流量完全DNAT

说是多对多,实际上这里的配置是指定了多个一对一

环境:

eth0 192.168.0.1  内网

eth1 202.202.202.1 、202.202.202.2 外网

内网中2台主机 192.168.0.101、192.168.0.102

现在要把外网访问202.202.202.1的所有流量映射到192.168.0.101上,同时把把外网访问202.202.202.2的所有流量映射到192.168.0.102上

这里顺便提一下如何为网卡配置多个IP


[c-sharp] view plain copy
  1. ifconfig eth1:1 202.202.202.2 netmask 255.255.255.0 up  


命令如下:


[c-sharp] view plain copy
  1. #将防火墙改为转发模式  
  2. echo 1 > /proc/sys/net/ipv4/ip_forward  
  3. iptables -F  
  4. iptables -t nat -F  
  5. iptables -t mangle -F  
  6. iptables -X  
  7. iptables -t nat -X  
  8. iptables -t mangle -X  
  9.   
  10. iptables -A INPUT -i lo -j ACCEPT  
  11. iptables -A OUTPUT -o lo -j ACCEPT  
  12.   
  13. iptables -P INPUT ACCEPT  
  14. iptables -P OUTPUT ACCEPT  
  15. iptables -P FORWARD ACCEPT  
  16.   
  17. iptables -t nat -A PREROUTING -d 202.202.202.1 -j DNAT --to-destination 192.168.0.101  
  18. iptables -t nat -A POSTROUTING -d 192.168.0.101 -j SNAT --to 192.168.0.1  
  19.   
  20. iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102  
  21. iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1  


3.一对多根据协议DNAT

 这个最常用,一般是内网或DMZ区内有多个应用服务器,可以将不同的应用流量映射到不同的服务器上

环境:

eth0 192.168.0.1  内网

eth1 202.202.202.1  外网

内网中2台主机 192.168.0.101(Web服务器)、192.168.0.102(邮件服务器)

现在要把外网访问202.202.202.1的Web流量映射到192.168.0.101上,同时把把外网访问202.202.202.1的邮件访问流量映射到192.168.0.102上

命令如下:


[c-sharp] view plain copy
  1. #将防火墙改为转发模式  
  2. echo 1 > /proc/sys/net/ipv4/ip_forward  
  3. iptables -F  
  4. iptables -t nat -F  
  5. iptables -t mangle -F  
  6. iptables -X  
  7. iptables -t nat -X  
  8. iptables -t mangle -X  
  9.   
  10. iptables -A INPUT -i lo -j ACCEPT  
  11. iptables -A OUTPUT -o lo -j ACCEPT  
  12.   
  13. iptables -P INPUT ACCEPT  
  14. iptables -P OUTPUT ACCEPT  
  15. iptables -P FORWARD ACCEPT  
  16.   
  17. iptables -t nat -A PREROUTING -d 202.202.202.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.101:80  
  18. iptables -t nat -A POSTROUTING -d 192.168.0.101 -p tcp --dport 80 -j SNAT --to 192.168.0.1  
  19.   
  20. iptables -t nat -A PREROUTING -d 202.202.202.1 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.102:25  
  21. iptables -t nat -A POSTROUTING -d 192.168.0.102 -p tcp --dport 25 -j SNAT --to 192.168.0.1  
  22.   
  23. iptables -t nat -A PREROUTING -d 202.202.202.1 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.102:110  
  24. iptables -t nat -A POSTROUTING -d 192.168.0.102 -p tcp --dport 110 -j SNAT --to 192.168.0.1  

转自:http://blog.csdn.net/bill_lee_sh_cn/article/details/4401896

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
	
  • 1

思路


如图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

将下项注释去掉

# net.ipv4.ipv4_forward=1
1
使改动生效
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

 

# Destination network  address translate (dnat)

 

# 如图2所示

iptables -t nat -A PREROUTING  -p tcp -d 192.168.1.3 --dport 8001 -j DNAT --to 192.168.1.1:8001

iptables -t nat -A PREROUTING  -p tcp -d 10.138.108.10

  --dport 8001 -j DNAT --to 192.168.1.1:8001


 

iptables -A FORWARD -p tcp -d 192.168.1.1 --dport 8001 -j ACCEPT

 

# 本地连接不经过prerouting,只经过output链,所以想要在服务器A通过本地ip访问服务器B需要在output 链增加dnat规则

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

 

# source network address translate (snat)

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.1 --dport 8001_Port -j SNAT --to 192.168.1.3

 

# 显示已有规则

iptables -t nat -L -n --line-number


一 :从一台机到另一台机端口转发

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

举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端口

a.同一端口转发(192.168.0.132上开通1521端口访问

iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT)

iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.0.211

iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE


b.不同端口转发(192.168.0.132上开通21521端口访问

iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21521 -j ACCEPT)

iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132


以上两条等价配置(更简单[指定网卡]):

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 31521 -j DNAT --to 192.168.0.211:1521
iptables -t nat -A POSTROUTING -j MASQUERADE

保存iptables
#service iptables save
#service iptables restart

二 用iptables做本机端口转发  代码如下:

  iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

  估计适当增加其它的参数也可以做不同IP的端口转发。

  如果需要本机也可以访问,则需要配置OUTPUT链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):

  iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080


原因:
外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT。


#######################################################################################


概述:公司有一些核心MySQL服务器位于核心机房的内网段,作为运维人员,经常需要去连接这些服务器,因无法直接通过外网访问,给管理造成了不便。


思路:虽然解决此问题的方法及思路有很多,但当下想使用IPTABLES的端口重定向功能解决此问题,比较简单易用,而且扩展性也比较好,依次类推,可以运用到其他的端口转发方面的应用。
网络环境:

公网服务器      :eth0:公网IP    eth1:内网IP - 192.168.1.1
mysql服务器:eth1:内网IP - 192.168.1.2

实现方法:通过访问公网IP的63306端口来实现到内网MYSQL服务器的3306端口的访问

在公网服务器上:

配置脚本:

iptables -t nat -A PREROUTING -p tcp --dport 63306 -j DNAT --to-destination 192.168.1.2:3306
iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 3306 -j SNAT --to 192.168.1.1

允许服务器的IP转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward
使用方法:
mysql -h 公网IP -p 63306 -uroot -p

###############################################################################################


由于业务需要,服务器越来越多,内网服务器无外网环境管理甚是不便,所以折腾了一下外网到内网的端口转发以达到轻松管理的目的,贴一下心得。




S1:
eth0 10.0.0.1
eth1 x.x.x.x




S2:
eth0 10.0.0.2




S1 8082端口转发到内网机器22端口


iptables规则配置如下:


iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 8082 -j DNAT --to-destination 10.0.0.2:22


iptables -t nat -A POSTROUTING -d 10.0.0.2 -p tcp --dport 22 -j SNAT --to-source x.x.x.x


说明:
iptables -t nat -A PREROUTING -d "对外公网ip" -p tcp --dport "对外端口" -j DNAT --to "内部实际提供服务的ip":"实际提供服务的端口"


iptables -t nat -A POSTROUTING -d "内部实际提供服务的ip"-p tcp --dport "实际提供服务的端口" -j SNAT --to-source "运行iptables机器的内网ip"


阅读(1383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~