使用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"是“路由规则”之后的动作。
源地址发送数据--> {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是“路由规则”之后的动作!
一般情况下,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链上进行的
MASQUERADE是SNAT的一个特例
SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机
MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE
DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B
因为,路由是按照目的地址来选择的,因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的
0 0
- 使用iptables实现外网转发内网
- 使用iptables实现外网转发内网
- 通过iptables实现端口转发和内网共享上网
- 用IPTABLES的端口转发功能实现访问位于内网的MYSQL服务器
- 使用IPtables 实现数据转发
- 使用IPtables 实现数据转发
- iptables 网口转发
- iptables学习笔记:端口转发之“外网访问内网”
- iptables学习笔记:端口转发之“内网访问外网”
- iptables学习笔记:端口转发之“外网访问内网”
- iptables学习笔记:端口转发之“内网访问外网”
- 使用NAT转发实现内网和外网的通讯
- 使用SecureCRT转发功能,实现外网访问内网服务
- iptables 实现centos内网机器访问外网
- 利用ngork实现内网实现内网转发
- 使用LCX进行内网端口转发
- nginx端口转发内网使用yum
- iptables实现路由转发
- 使用批处理替换appium客户端
- 单源最短路径---Dijkstra
- shell脚本之echo命令
- tableView怎么刷新置顶
- Windows消息机制概述
- 使用iptables实现外网转发内网
- [leetcode] 89. Gray Code
- oc开发笔记1 录音和播放
- Bison眼中的iOS开发多线程是这样的(三)
- 实现图像剪裁 jquery.Jcrop
- Dataguard DBLOG FILE NAME CONVERT has been set but files are created in a different directory (文档 ID
- 大型网站架构知识框架
- 冒泡排序
- javascript 升序和降序