介绍
VPP运行在Intel的Atom处理器系统上,是作为一个SOHO路由器的较好方案。
Linux发行版本
Linux发行版本使用的是Ubuntu 16.04 LTS,
安装VPP
Clone vpp 最新代码,编译软件:
$ git clone http://gerrit.fd.io/r/vpp vpp-gate $ cd vpp-gate $ make install-dep $ make dpdk-install-dev $ cd dpdk $ sudo dpkg -i *.deb $ cd ../build-root $ ./bootstrap.sh $ make PLATFORM=vpp TAG=vpp_debug install-deb $ sudo dpkg -i *.deb $ sudo service vpp stop
安装额外的软件包
作为最小安装需要,还需要安装sshd和isc-dhcp-server
$ apt-get install isc-dhcp-server sshd
编辑vpp startup config
编辑 /etc/vpp/startup.conf, 按照如下内容.
unix { nodaemon log /var/log/vpp/vpp.log full-coredump cli-listen localhost:5002 startup-config /home/userid/setup.gate } snat { max translations per user 500 }
配置isc-dhcp-server
指定内网网段,指定默认网关地址和DNS服务器地址
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.99; option routers 192.168.1.1; option domain-name-servers 8.8.8.8; }
配置/etc/ssh/sshd_config
# What ports, IPs and protocols we listen for Port <REDACTED-high-number-port> # Change to no to disable tunnelled clear text passwords PasswordAuthentication no
vpp 启动配置
这里的配置实用了IRB和SNAT插件
comment { bring the WAN interface up, then change the MAC address. Otherwise the rx filter will be misprogrammed! } set int state GigabitEthernet3/0/0 up set int mac address GigabitEthernet3/0/0 <desired-mac-address> set dhcp client intfc GigabitEthernet3/0/0 hostname vppgate comment { create the IRB loopback interface, give it the usual local network IP address } loopback create set int l2 bridge loop0 1 bvi set int ip address loop0 192.168.1.1/24 set int state loop0 up comment { add other inside addresses to the IRB bridge group } set int l2 bridge GigabitEthernet4/0/0 1 set int state GigabitEthernet4/0/0 up set int l2 bridge GigabitEthernet0/14/0 1 set int state GigabitEthernet0/14/0 up set int l2 bridge GigabitEthernet0/14/1 1 set int state GigabitEthernet0/14/1 up set int l2 bridge GigabitEthernet0/14/2 1 set int state GigabitEthernet0/14/2 up comment { create a tap interface for dhcp server and host-stack access } tap connect lstack address 192.168.1.2/24 set int l2 bridge tap-0 1 set int state tap-0 up comment { Configure the snat plugin } nat44 add interface address GigabitEthernet3/0/0 set interface nat44 in loop0 out GigabitEthernet3/0/0 comment { create static outside-to-inside port mappings } comment { Send traffic received on the WAN interface DHCP address, <REDACTED-outside-port> to 192.168.1.xxx, <REDACTED-inside-port> nat44 add static mapping local 192.168.1.xxx <REDACTED-inside-port> external GigabitEthernet3/0/0 <REDACTED-outside-port> tcp comment { Enable the vpp DNS caching name resolver } comment { nat44 add identity mapping external GigabitEthernet3/0/0 udp 53053 } comment { bin dns_name_server_add_del 8.8.8.8 } comment { bin dns_enable_disable }
验证DNS解析
vpp# bin dns_resolve_name www.cisco.com <wait a couple of seconds> vpp# show dns cache verbose 2 或者 $ dig @192.168.1.1 www.cisco.com # from a Linux host