VPP HomeRouter
本文主要用于测试玩耍,仅供参考,商用建议谨慎选择。如果采用ubuntu系统可参考VPP官方相关文档。本文基于centos7.6系统,本文源站链接。
1.前置条件准备
在此之前最好准备相关物理设备,或PC+物理网卡。本文选用dnsmasq作为轻量级dhcp服务,相关配置可参考Dnsmasq使用参考入门。
centos系统内相关配置如下。
#安装dnsmasq用于dhcp以及dns服务
yum install -y dnsmasq
systemctl start dnsmasq.service
systemctl enable dnsmasq
#安装VPP过程这里不再冗述,可参考本人相关文章。
systemctl enable vpp
#!!!关闭防火墙,一定要检测防火墙到dhcp分配ip的影响。商用需要修改iptable
systemctl stop firewalld
#暂时关闭selinux
setenforce 0
#如要永久修改/etc/sysconfig/selinux配置文件, 设置 SELINUX=disabled
#安装bind-utils用于dns解析查询,dig/nslookup等命令(可选操作)
yum install -y bind-utils
#安装tcpdump查包工具,用于包检查(可选操作)
yum install -y tcpdump
2.配置vpp接管网口
这里不具体描述vpp接管网口的过程,具体编译安装VPP及运行可以参考文章<编译安装VPP及运行>
#下面就简单描述VPP结果过程
ifconfig enp1s0 down
ifconfig enp2s0 down
ifconfig enp3s0 down
ifconfig enp4s0 down
ifconfig enp5s0 down
systemctl restart vpp
3.VPP相关配置
这里设置WAN口为g0,代表上述enp1s0网口。LAN口g1,g2,g3,g4按照顺序如上一一对应。如下命令在vppctl中执行。
# 设置WAN口G0信息数据,MAC自行配置
set int state g0 up
set int mac address g0 00:11:22:33:44:55
set dhcp client intfc g0 hostname vppgate
# 创建loop口设置IP,并挂接网桥
loopback create
set int l2 bridge loop0 1 bvi
set int ip address loop0 192.168.10.1/24
set int state loop0 up
# LAN口配置
set int l2 bridge g1 1
set int state g1 up
set int l2 bridge g2 1
set int state g2 up
set int l2 bridge g3 1
set int state g3 up
set int l2 bridge g4 1
set int state g4 up
# 创建tap口并映射到内核
create tap id 0 host-ip4-addr 192.168.10.2/24 host-if-name lstack
set int l2 bridge tap0 1
set int state tap0 up
# 查看配置
show int addr
# 设置源nat模式
nat44 add interface address g0
set interface nat44 in loop0 out g0
show nat44 interfaces
# 如果有目的nat需求,配置如下。(可选步骤)
nat44 add static mapping local 192.168.10.1 53 external g0 53 tcp
nat44 add static mapping local 192.168.10.1 53 external g0 53 udp
show nat44 static mappings
#nat44 add identity mapping external GigabitEthernet3/0/0 udp 53053 }
4.主机配置默认路由
随后,可以在主机内核中,查看是否创建好的lstack网口。
#查看是否存在lstack接口
ip addr show lstack
#设置默认路由走向
ip route add default dev lstack via 192.168.10.1
5.配置DHCP服务
进行dnsmasq服务配置,配置文件/etc/dnsmasq.conf,重点几项配置如下,然后重启dnsmasq服务。
#设置监听端口为lstack
interface=lstack
#删除注释标记,使得bind-interfaces选项执行
bind-interfaces
#设置监听地址为192.168.10.2
listen-address=192.168.10.2
dhcp-range=192.168.10.10,192.168.10.150,255.255.255.0,12h
#设置默认网关为192.168.10.1
dhcp-option=3,192.168.10.1
#dnsmasq默认开启dns server,这里设置dns名
domain=TestDomain
#设置分配到LAN口的DNS服务器IP为114.114.114.114。如果该条不指定,dnsmasq将从其上级获取响应dns请求用于解析。
dhcp-option=6,114.114.114.114
#设置指定域名的IP地址,该条目可以不加
#server=/baidu.com/220.181.38.148
#重启服务
systemctl restart dnsmasq
至此,已基本实现路由器基本功能。客户端物理连接进设备某网口,或已连接后重启客户端网卡获取ip,即可实现正常上网功能。
6.配置DNS缓存服务
这里因为采用dnsmasq,所有可以不采用vpp中DNS缓存服务。如果配置VPP中添加DNS解析服务器IP,将覆盖部分原dnsmasq中dns配置,VPP中相关配置命令如下可以作为参考。
bin dns_name_server_add_del 8.8.8.8
bin dns_enable_disable
#显示目前可用的DNS服务器IP
show dns servers
show dns cache verbose
bin dns_name_server_add_del 8.8.8.8
bin dns_enable_disable
这两条命令的作用没看明白