1. 简介neutron-l3-agent
OpenStack neutron-l3-agent 主要负责实现网络三层协议,为虚拟机完成SNAT,DNAT等地址的转换与伪装,提供安全弹性隔离的云网络环境,
下面详细叙述了OpenStack如何使用iptables链与规则完成复杂的neutron-l3-agent 的网络地址转换(NAT)功能,虚拟机floating ip与fixed ip绑定的工作原理。
2. iptables 简介
2.1 iptables 链拓扑结构
2.2 iptables 表结构
Table filter:
Chain INPUT
Chain FORWARDChain OUTPUT
filter 表用于一般的信息包过滤,它包含 INPUT 、 OUTPUT 和 FORWARD 链。
Table nat:
Chain PREROUTING
Chain OUTPUT
Chain POSTROUTING
PREROUTING 链由指定信息包一到达防火墙就改变它们的规则所组成,而 POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
3. iptables command
# 添加一条规则到 INPUT 链的末尾,ACCEPT 来自源地址 10.9.1.141 的包
[root@xianghui-10-9-1-141 ~]# iptables -A INPUT -s 10.9.1.141 -j ACCEPT
#允许protocol为TCP 、 UDP 、 ICMP 的包通过
[root@xianghui-10-9-1-141 ~]# iptables -A INPUT -p TCP, UDP
# 从INPUT链中删除掉规则“Drop 到端口80的包”
[root@xianghui-10-9-1-141 ~]# iptables -D INPUT --dport 80 -j DROP
# 将 INPUT 链的缺省规则指定为 DROP
[root@xianghui-10-9-1-141 ~]# iptables -P INPUT DROP
# 创建一个新链new-chain
[root@xianghui-10-9-1-141 ~]# iptables -N new-chain
# 删除Table filter 中的所有规则
[root@xianghui-10-9-1-141 ~]# iptables -F
# 列出INPUT链中的所有规则
[root@xianghui-10-9-1-141 ~]# iptables -L INPUT
# 删除链
[root@xianghui-10-9-1-141 ~]# iptables -X
4. 配置neutron-l3-agent
[root@xianghui-10-9-1-141 ~]# neutron router-create router1
+--------------------------------------+---------+-----------------------+
| id | name | external_gateway_info |
+--------------------------------------+---------+-----------------------+
|c36b384e-b1f5-45e5-bb4f-c3ed32885142 | router1 | null |
+--------------------------------------+---------+-----------------------+
[root@xianghui-10-9-1-141 ~]# vi /etc/neutron/l3_agent.ini
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
# OS is RHEL6.4, not support namespace
use_namespaces = False
# This is done by setting the specific router_id.
router_id = c36b384e-b1f5-45e5-bb4f-c3ed32885142
# Name of bridge used for external network traffic. This should be set to
#