中小型互联网企业级网关架构设计

介绍

        系统环境:centos7

        目标:实现公司办公出网并且各部门网络权限控制

        采用技术:ipset、iptables、iprule及iproute

背景

        本文旨在于实现自建网关的设计及实现,可实现上千人规模的公司采用

        首先,规划内网网段使用,可按照部门划分或者按照位置划分,比如:运营部门(192.168.1.0/24)、开发部门(192.168.2.0/24)、售后部门(192.168.3.0/24)、产品部门(192.168.4.0/24)、网络管理部门(192.168.5.0/24)....以此类推

        那么针对于公司每个部门不仅要实现都可以正常出网,并且还要设计好权限的控制,比如不可以跨网段访问、限制下载带宽、权限控制等等

技术实现

1. 网卡设计

针对于网关机器除了要有一个管理ip,还有其他两块网卡:内网网卡、公网网卡,那么针对于网卡可以设计成子网卡的形式,按照网段划分,创建对应的子网卡,然后设置成各网段的网关ip。

# 内网网卡:eth1
vconfig add eth1 1                       # 添加子网卡
ip addr add 192.168.1.254 dev eth1.1     # 为子网卡添加1段的网关ip
ifconfig eth0.1 up                       # up网卡

# 公网网卡:eth2
vconfig add eth2 1                       # 添加子网卡:xx运营商
ip addr add 运营商出网ip1 dev eth2.1      # 为子网卡添加该运营商的出网ip
ip addr add 运营商出网ip2 dev eth2.1
ip addr add 运营商出网ip3 dev eth2.1....  # 为一个子网卡添加多个ip时,使用ip addr和ifconfig添加会有所不同,有坑,可测试

 2. ipset

我们采用iptables作为权限控制的工具,那么如果一个ip就要设置一条规则,就太浪费系统性能了,ipset就可以很好的解决这一点,ipset是一个集合的概念,可以将多个ip归属于一个ipset组,然后针对于这个组进行权限设置(ipset组可以是ip、net、port类型,看具体需求)

给所有办公段创建一个ipset组

ipset create 运营商出网ip1 hash:net family inet  # 创建一个ipset组,命名可按网段来写或者出网ip来写
ipset create 运营商出网ip2 hash:net family inet
ipset create 运营商出网ip3 hash:net family inet
ipset create 运营商出网ip4 hash:net family inet.....

将所有办公ip加入到对应的ipset组中

ipset add 运营商出网ip1 192.168.1.0/24   # 因为建的ipset组为net类型,可添加整个段
ipset add 运营商出网ip2 192.168.2.0/24
ipset add 运营商出网ip3 192.168.3.0/24
ipset add 运营商出网ip4 192.168.4.0/24

 3. iptables-mangle表

iptables四表五链的顺序及功能不再赘述,此次设计会通过mangle表将我们刚才创建的ipset组设置成一个个的标签,我们通过标签来匹配对应的ipset组

iptables -t mangle -A PREROUTING -m set --match-set 运营商出网ip1 src -j MARK --set-xmark 0x01
iptables -t mangle -A PREROUTING -m set --match-set 运营商出网ip2 src -j MARK --set-xmark 0x02
iptables -t mangle -A PREROUTING -m set --match-set 运营商出网ip3 src -j MARK --set-xmark 0x03
iptables -t mangle -A PREROUTING -m set --match-set 运营商出网ip4 src -j MARK --set-xmark 0x04

4. iptables-net表

net表通过标签匹配到对应的ipset组,然后将所有在组里的ip出网ipset做snet,转换成对应的运营商出网ip

iptables -t nat -A POSTROUTING -m mark --mark 0x01 -j SNAT --to-source 运营商出网ip1
iptables -t nat -A POSTROUTING -m mark --mark 0x02 -j SNAT --to-source 运营商出网ip2
iptables -t nat -A POSTROUTING -m mark --mark 0x03 -j SNAT --to-source 运营商出网ip3
iptables -t nat -A POSTROUTING -m mark --mark 0x04 -j SNAT --to-source 运营商出网ip4

5.iprule

基于策略的路由,可在iproute的基础上有很多扩展性,此处我们将所有同一个运营商的ipset组指向该运营商的路由表

ip rule add from all fwmark 0x01 lookup xx运营商路由表
ip rule add from all fwmark 0x02 lookup xx运营商路由表
ip rule add from all fwmark 0x03 lookup xx运营商路由表
ip rule add from all fwmark 0x04 lookup xx运营商路由表......

6.iproute

数据根据路由策略指向对应的路由表,然后根据路由表中的具体规则找到下一跳

# 各内网办公段数据包走向规则
/sbin/ip route add 192.168.1.0/24   via 192.168.1.254  table xx运营商路由表
/sbin/ip route add 192.168.2.0/24   via 192.168.2.254  table xx运营商路由表
/sbin/ip route add 192.168.3.0/24   via 192.168.3.254  table xx运营商路由表
/sbin/ip route add 192.168.4.0/24   via 192.168.3.254  table xx运营商路由表

# 路由表还要有一条默认规则,即该运营商的网关ip,即表示默认的数据通过此公网网关出去
/sbin/ip route add default via xxx.xxx.xxx.xxx table xx运营商路由表

7.iptables-filter表

上面步骤基本满足了办公需求,但是针对权限没有控制,此处通过filter表设置各办公段默认不互通,当然如果需要某个段权限最大,比如网络管理部门需要到所有段都通,那么就通过此表来控制

#01 禁止跨办公段互通

iptables -A FORWARD -s 192.168.0.0/16 -d 192.168.0.0/16 -m comment --comment "办公网禁止内网互通" -j DROP

#02 设置每个段本段互通的规则(此处存疑,其实不用为每个段设置本段互通链,因为不跨段访问经过测试好像并走不到网关,网关下面有汇聚、很多的接入)

# 此处是针对每个段增加扩展链,具体的规则走扩展链
iptables -A FORWARD -m comment --comment "1段互通链" -j 1_FORWARD 

# 此处是在扩展链中设置,1段允许访问后面匹配的ipset组的内容
iptables -A 1_FORWARD -s 192.168.1.0/24 -m set --match-set 192.168.1.0/24_all dst,dst -j ACCEPT

# 查看匹配的ipset组内容
# ipset list 192.168.1.0/24_all
Name: 192.168.1.0/24_all
Type: list:set
Revision: 3
Header: size 8
Size in memory: 208
References: 1
Number of entries: 2
Members:
192.168.1.0/24_ip
192.168.1.0/24_port

# ipset list 192.168.1.0/24_ip
Name: 192.168.1.0/24_ip
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 568
References: 1
Number of entries: 3
Members:
192.168.1.0/24

#03 配置通往云上环境、测试集群环境

云上环境和测试集群环境都通过云联网或者技术实现了内网互通,所以如果某个部门的人需要访问云上环境或者测试集群环境的机器那么直接在当段的ipset组下增加目标ip即可

8. 限速

限速可通过tc工具,写个脚本,tc命令之前了解过,待我再研究下再在此记录

结束

其实此结构还较为简单,生产环境的话肯定会有各种各样的特殊需求,并且需要配合更多扩展情况,所以此文还有待补充。

你可能感兴趣的:(服务器,linux,运维,网络)