场景需求:
某市场采购了一批AWS的ec2实例,放到一个VPC虚拟局域网里面,但只有两三台需要对外开放服务的虚机分配了公网ip,自然也有上网的能力;
其它服务器比如数据库,一没有关联公网ip,二也不允许暴露在互联网,那么问题来了,如果这些服务器需要访问外部的资源如打一些依赖包,如何处理?
临时分配一个公网ip,用完再解除关联?把包从有上网能力的虚机下载下来,然后拷贝到这些服务器里?
作为专业运维人员,前者不符合规矩,容易留下把柄,后者倒不是不可以;
但今天博主要总结分享的是基于linux的iptables的nat端口转发规则以及通过yum缓存rpm包拷贝打依赖包!
同时也可以回顾一下上篇文章:【windows】netsh创建的portproxy端口转发映射
iptables-nat端口转发实例配置步骤:
配置之前,我们要了解一下iptables和nat的概念,iptables是linux内核组件netfilter框架中的ip信息包过滤系统工具,也可以理解为iptables是netfilter的管理工具;
(右图是博主理解的filter结构图以供参考)
netfilter提供了linux内核对信息包传输处理的框架,由四个表五条链组成:
四个表:filter、nat、mangle、raw
五条链:prerouting、input、forward、output、postrouting
filter是一般的过滤功能,雷同防火墙的开放策略、nat用于端口映射,地址映射等、mangle则是对特定数据包的修改、raw配置后有限级最高,一般为了不再让iptables做数据包的链接跟踪处理,从而提高性能。
prerouting指数据包进入路由表之前也就是网卡的入口处;input是数据通过路由表后目的地址为本机从此入口进入本机系统处理;forward表示数据通过路由表后目的地址不是本机经过这个链路移交到postrouting从而转发前往目的地址;postrouting即流量发出和网络接口出口处,output则是由本机产生的数据由此向外转发到portrouting前往目的地址;
而今天我们要讲的就是通过iptables配置nat表,分dnat和snat两种,即目的nat和源nat;
两者的区别在于,前者是改变数据包的目的地址,后者则是改变数据包的源地址;
dnat一般配置为内部向外部开放某些端口服务使用,即是供给外部ip向内部访问的规则;
snat一般配置为内部访问外部的地址转换,如源动态端口转换,即提供内部向外部访问时转换为公网身份的规则;
废话不多说,赶快跟随博主一起来看看这个经典的配置实例吧!!!
- 案例环境:
首先一台web前置虚机内网ip:192.168.10.101,关联外网ip:124.207.1.1,可访问互联网;
一台数据库db服务器内网ip:192.168.10.102,无外网ip,无法访问互联网,只能VPC内部网络互相访问; - 案例需求:
让db服务器通过web虚机做转发代理访问外部资源,这里配置了一个外部yum源,供db服务器打相关依赖包;
yum源采用的是天翼云的:mirrors.ctyun.cn、解析到ip为:101.227.253.28;
①、首先在web服务器上启用转发功能:
[root@Moni ~]# echo 1>/proc/sys/net/ipv4/ip_forward
②、其次在web服务器上配置dnat规则,当db服务器访问web本地的80端口时,转发到yum源的101.227.253.28;
[root@Moni ~]# iptables -t nat -A PREROUTING -p tcp --src 192.168.10.102 --dport 80 -j DNAT --to 101.227.253.28
③、然后在web服务器上配置snat规则,把目标地址是db服务器ip192.168.10.102的数据包,源ip改成自己本地ip192.168.10.101;
[root@Moni ~]# iptables -t nat -A POSTROUTING --src 192.168.10.102 -o eth0 -j SNAT --to 192.168.10.101
④、在db服务器上添加hosts解析yum源指向web虚机192.168.10.101,并配置yum源;
[root@Moni ~]# vi /etc/hosts
192.168.10.101 mirrors.ctyun.cn
[root@Moni ~]# vim /etc/yum.repos.d/tianyy.repo
[tianyiyun]
name=tianyiyun-yum-source-centos6.9
baseurl=http://mirrors.ustc.edu.cn/centos/6.9/os/x86_64/
enabled=1
gpgcheck=0
(好的就分享到这里,如果您有高见或好的分享,记得留言哦!)
这里来不够,看不够,玩不够!