虚拟隔离网络外网访问(SNAT)

首先介绍下iptables

百度百科:iptables介绍
我们熟悉的防火墙过滤数据包规则只是iptables的一个子功能。

iptables能完成的功能有:

1:过滤规则前的NAT转换
2:过滤数据包
3:过滤后的NAT转换

这节我们主要讲解的是,第三条:过滤后的额NAT规则转换

  • 其中的过滤数据包规则是私有网络的ACL规则部分,将在之后讲解机房网络的时候做讲解。

NAT转换分为SNAT转换和DNAT转换。作用原理分别是把所有的包的源IP换为某个IP或者将所有包的目标地址换为某个IP。

目前我们生产环境中的构架图如下图所示:

这里写图片描述

解释:

  • br-int就是我们上节所叙述的用户的虚拟网路的网关,也可以说说是用户的路由器。
  • 我们为为每一个用户创建一个netns用来转换虚拟网络的外网数据。如上图的两个租户的虚拟网络的地址空间均是10.1.0.0/24,域名空间的网关地址均为10.1.0.1地址,我们在对其网络包进行过滤之后对其分别进行SNAT,其中用户A的私有网络空间数据包被SNAT转换为169.254.4.24,B的被转换为169.254.4.25
  • 被转换后的数据包经由br-ex传输物理机空间之后经过第二次的SNAT转换,然后选择合适的路由转换。

公网数据回来的路径也需要经过这条路线。

测试我们再次仍然用一个虚拟的netns代替vm进行测试。

搭建测试环境

我们仍然使用脚本来进行初始化

#!/bin/bash -x
# create two switch br-int and br-ex

ovs-vsctl add-br br-int -- add-br br-ex

ovs-vsctl add-port br-int l3_s1_a -- set port l3_s1_a tag=2 -- set interface l3_s1_a type=internal
ovs-vsctl add-port br-int l3_s1_b -- set port l3_s1_b tag=1 -- set interface l3_s1_b type=internal

ovs-vsctl add-port br-ex ex_a -- set interface ex_a type=internal
ovs-vsctl add-port br-ex ex_b -- set interface ex_b type=internal

ip netns add l3_a
ip netns add l3_b
# 在一个netns里面添加两个网卡,一个是虚拟网络的网关,一个是出口网关
ip link set ex_a netns l3_a
ip link set l3_s1_a netns l3_a
ip netns exec l3_a ifconfig ex_a up
ip netns exec l3_a ifconfig lo up
ip netns exec l3_a ifconfig l3_s1_a up
ip netns exec l3_a ip a a 10.1.0.1/24 dev l3_s1_a
ip netns exec l3_a ip a a 169.254.4.24/24 dev ex_a

# 添加默认路由,对于不认识的路由都默认都网关出去,此处可以用来进行acl规则限制,后面讲述
ip netns exec l3_a ip r a default via 169.254.4.1 dev ex_a
ip netns exec l3_a sysctl -w net.ipv4.ip_forward=1 # 打开IP转发
# 添加SNAT规则,每个虚拟网络的SNAT不一样。
ip netns exec l3_a iptables -t nat -A POSTROUTING ! -d 10.1.0.1/24 -j SNAT --to-source 169.254.4.24

#  与上面重复,在此不再详细叙述
ip link set ex_b netns l3_b
ip link set l3_s1_b netns l3_b
ip netns exec l3_b ifconfig ex_b up
ip netns exec l3_a ifconfig lo up
ip netns exec l3_b ifconfig l3_s1_b up
ip netns exec l3_b ip a a 10.1.0.1/24 dev l3_s1_b
ip netns exec l3_b ip a a 169.254.4.25/24 dev ex_b

ip netns exec l3_b ip r a default via 169.254.4.1 dev ex_b
ip netns exec l3_b sysctl -w net.ipv4.ip_forward=1
ip netns exec l3_b iptables -t nat -A POSTROUTING ! -d 10.1.0.1/24 -j SNAT --to-source 169.254.4.25

# 添加一个本地端口,加上出口的虚拟ip,169.254.4.1
ovs-vsctl add-port br-ex p_ex -- set interface p_ex type=internal
ifconfig p_ex up
ip a a 169.254.4.1/24 dev p_ex

# 添加本地的ip转发,和SANT规则,此处IP我们让系统默认为我们选择。
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 169.254.4.0/24  -j MASQUERADE


# create test vm  这段就不解释了
ovs-vsctl add-port br-int vm_s1_a1 -- set port vm_s1_a1 tag=2 -- set interface vm_s1_a1 type=internal
ip netns add vm_s1_a1
ip link set vm_s1_a1 netns vm_s1_a1
ip netns exec vm_s1_a1 ifconfig vm_s1_a1 up
ip netns exec vm_s1_a1 ip a a 10.1.0.11/24 dev vm_s1_a1
ip netns exec vm_s1_a1 ip r a default via 10.1.0.1 dev vm_s1_a1

接下来我们来做测试:

root@linux /home/abaobo/tmp 2015-08-28 18:36:00 
# ip netns exec l3_a ping 10.240.153.143
PING 10.240.153.143 (10.240.153.143) 56(84) bytes of data.
64 bytes from 10.240.153.143: icmp_seq=1 ttl=64 time=0.566 ms
^C
--- 10.240.153.143 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.566/0.566/0.566/0.000 ms
root@linux /home/abaobo/tmp 2015-08-28 18:36:06 
# ip netns exec l3_a ping 8.8.8.8       
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=38 time=116 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=38 time=115 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 2 received, 33% packet loss, time 2009ms
rtt min/avg/max/mdev = 115.726/115.909/116.092/0.183 ms
root@linux /home/abaobo/tmp 2015-08-28 18:36:15 

从测试结果来看我们已经完成了我们需要的功能

总结

前面的这几节我们已经讲述了除了acl规则控制之外的虚拟私有网络的所有功能,

这里面包括:

  • 1,本地的2层网络。
  • 2,跨物理节点的2层网络。
  • 3,虚拟网络的DHCP服务(静态分配策略)。
  • 4,私有网络的接入服务,vpn。
  • 5,私有网络的外出口,SNAT。

在下面一节我们将讲述分析openstak中的那张非常复杂的网络图。
虚拟网络的ACL规则部分的实现就是L3中做的iptables过滤规则,基本内容也就是iptables的添加,将不再讲述。

关于机房网络(网易云计算特色)我们也将在后面单独讲述。

其实这些只是基本的功能,在实际的生产环境中我们要做到的所有服务的高可用,应该怎么做到高可用呢,敬请期待。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值