前面介绍带内网络管理和带外网络管理时(带内网络管理和带外网络管理有啥区别?),我们提到公有云环境不建议采用带外网络管理,因为增加网络接口之后,对应的需要增加公网IP地址,增加部署成本。
比如我们之前介绍的VPP,我常用的两台设备就是VPP72和VPP73,我在配置案例时就是使用了带外管理口。
如上图所示,网卡ens192就是带外管理网卡,另外两个就是VPP的业务网卡。
我们给eth1配置一个IP地址。
vppctl set int state eth1 up
vppctl set int ip address eth1 11.1.1.1/24
然后试着从其他设备来远程VPP72。
我们可以发现,如果只有一个网卡,就会出现无法网管的问题。
其实这个问题也不大,主要是因为VPP不支持网管。
对于部署了VPP的主机,如果我们想远程进行网管,那还得想办法登录到宿主机的内核进行操作。关键是现在内核和VPP之间缺乏连接的通道,该怎么办呢?
回顾一下(给VPP增加一个接口(非DPDK方式)),在 Linux 中,有一种接口叫做“veth”,veth设备是成对出现的,一端连接内核的协议栈,另一端相连VPP的接口。所以,我们可以使用veth来连接内核和VPP之间的网络。
首先,在内核创建一个veth接口,一端命名为ethvpp,另一端命名为ethhost。
ip link add name ethvpp type veth peer name ethhost
这里我们可以看到,设备上新增了名称分别为ethhost@ethvpp和ethvpp@ethhost的两个接口,说明两个接口是有依赖关系的。
然后使能veth两端的接口。
ip link set dev ethvpp up
ip link set dev ethhost up
接口UP起来之后,我们给内核中的ethhost接口分配一个IP地址。
ip addr add 172.16.1.1/24 dev ethhost
接下来,我们在VPP内也创建一个接口,来连接到ethvpp的主机接口。
vppctl create host-interface name ethvpp
可以看到,接口ethvpp创建成功,然后手工使能接口host-ethvpp,并配置IP地址。
vppctl set interface state host-ethvpp up
vppctl set int ip address host-ethvpp 172.16.1.2/24
然后从内核中测试一下172.16.1.2的连通性。
我们接下来要测试从11.1.1.2来登录VPP72,所以我们先在VPP72内核中和11.1.1.2上配置好路由。
然后测试从11.1.1.2通过172.16.1.1远程登录VPP72。
登陆成功。
对于部署在公网的设备,我们建议是把内核的网关配置成host-ethvpp,并且在VPP的接口上配置NAT映射,就像(VPP配置指南:NAT“三板斧”)中介绍的那样。
vppctl set interface nat44 out eth1 output-feature
vppctl nat44 add interface address eth1
vppctl nat44 add identity mapping 11.1.1.1
vppctl nat44 add static mapping tcp local 172.16.1.1 22 external eth1 22
然后我们再通过11.1.1.1登录设备试一下。
登陆成功,查看NAT的相关信息。
可以看到,是将请求的11.1.1.1:22转换为了实际的172.16.1.1:22,业务访问成功。