使用iptables实现外网转发内网

来源:互联网 发布:mysql事务处理例子 编辑:程序博客网 时间:2024/06/03 16:30
server1: 外网ip 106.39.160.33 内网ip 10.10.0.5
server2: 10.10.0.58:27017  (mogodb端口)
目标:外部访问server1 106.39.160.33:27017 转发到 10.10.0.58:27017 

1、开启linux转发功能:
   echo 1 > /proc/sys/net/ipv4/ip_forward
   vi /etc/sysctl.conf,把net.ipv4.ip_forward设置成1,如:net.ipv4.ip_forward = 1
   优点:重启服务器或网络服务后自动开启ip转发功能

   修改立即生效
   sysctrl -p

2、实现转发:
   PREROUTING 和 POSTROUTING 区别:
            落实到网卡上,对于每个网卡数据流入的时候必然经过pre,数量流出必然经过post。
  #当数据包进入路由时,将目标ip为106.39.160.33的数据包的目的ip修改为10.10.0.58
  iptables -t nat -A PREROUTING -d 106.39.160.33 -p tcp --dport 27017 -j DNAT --to 10.10.0.58
  #当数据包发出时,将其目的ip为10.10.0.58的 源ip地址 修改为 10.10.0.5
  iptables -t nat -A POSTROUTING -d 10.10.0.58 -p tcp --dport 27017 -j SNAT --to 10.10.0.5
  # 允许路由转发 目的ip为10.10.0.58 目的端口为 27017 的所有包
  iptables -A FORWARD -p tcp -d 10.10.0.58 --dport 27017 -j ACCEPT
[http://blog.csdn.net/hiccupzhu/article/details/51073557]

知识扩充
1. 首先要明白什么是"PREROUTING" ,什么是"POSTROUTING",我们可以简单的用下面的关系来表示
源地址发送数据--> {PREROUTING-->路由规则-->POSTROUTING} -->目的地址接收到数据

当你使用:iptables -t nat -A PREROUTING -i eth1 -d 1.2.3.4 -j DNAT --to 192.168.1.40
时,你访问1.2.3.4,linux路由器会在“路由规则”之前将目的地址改为192.168.1.40,并且Linux路由器(iptables)会同时记录下这个连接,并在数据从192.168.1.40返回时,经过linux路由器将数据发送到那台发出请求的机器。所以你的"POSTROUTING"规则没有起作用。

而"POSTROUTING"是“路由规则”之后的动作。


2. PREROUTING的应用
一般情况下,PREROUTING应用在普通的NAT中(也就是SNAT),如:你用ADSL上网,这样你的网络中只有一个公网IP地址(如:61.129.66.5),但你的局域网中的用户还要上网(局域网IP地址为:192.168.1.0/24),这时你可以使用PREROUTING(SNAT)来将局域网中用户的IP地址转换成61.129.66.5,使他们也可以上网:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j SNAT 61.129.66.5


3. POSTROUTING的应用
POSTROUTING用于将你的服务器放在防火墙之后,作为保护服务器使用,例如:
A.你的服务器IP地址为:192.168.1.2;
B.你的防火墙(Linux & iptables)地址为192.168.1.1和202.96.129.5

Internet上的用户可以正常的访问202.96.129.5,但他们无法访问192.168.1.2,这时在Linux防火墙里可以做这样的设置:
iptables -t nat -A POSTROUTING -d 202.96.129.5 -j DNAT 192.168.1.2

结:最要紧的是我们要记住PREROUTING是“路由规则”之前的动作,POSTROUTING是“路由规则”之后的动作!


4. SNAT,DNAT,MASQUERADE的区别
SNAT,DNAT,MASQUERADE都是NAT
MASQUERADE是SNAT的一个特例
SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机
MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE
DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B

因为,路由是按照目的地址来选择的,因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的


[http://blog.csdn.net/hiccupzhu/article/details/51073557]
0 0
原创粉丝点击