上图意味着2件事:
1、要发送给VPC的数据连接到本地20000端口;从VPC发送出去的数据连接到本地30000端口。
2、最多虚拟出9台PC,直接输入数字切换。
给VPCS配上地址,再show,可见VPC1已经有了地址:
在GNS3的设备列表里拖出一朵云(注意别和NAT设备的云图标弄混了,两者图标一模一样):
直接点击Add,端口被添加到了右边,可见云的本地端口30000已经被添加,这是VPC要连接到的远程端口,而云的远程口20000正好是VPC的本地端口。现在把交换机和云连接,注意连接到UDP tunnel1:
至此,VPC1可以ping通网关10.0.0.1,也可以ping通直连路由器的下一跳12.0.0.2:
现在配置VPC2。在VPCS里打入2,切换到VPC2,配置地址后再show:
可见2个端口号是20001和30001,于是再拖出一朵云,按照上面的端口号配置:
交换机连接到UDP tunnel2以后,VPC2就可以ping通VPC1了:
最后的拓扑如下,实现了VPCS模拟2台PC互ping的目标:
VPCS的命令行详解
VPCS启动时的命令行参数解释,例如vpcs -v
OPTIONS
-h, --help
显示命令行选项,然后退出
-v
显示版本信息,然后退出
-R
禁止中继功能
[-i] num
指定VPCS所虚拟的PC的数量,最多9台。如省略本参数,VPCS将以9台虚拟PC启动。如果num为1,就如GNS3调用VPCS时那样,引用其他PC的命令将具有受限选项,并且提示将不显示PC编号。
-p port
以守护进程(daemon process)的身份运行VPCS,在TCP指定的端口上监听。作为守护进程,VPCS不向用户提供命令行接口,但可以通过telnet或netcat(nc)等TCP流应用程序远程访问命令行界面。一旦守护进程启动,就没有终止程序的内部机制,必须通过发送系统信号9来终止程序,通常使用命令kill -9 PID(其中PID是VPCS实例的进程ID)来终止程序
-m num
默认情况下,9个VPC使用9个连续的MAC地址,默认是00:50:79:66:68:00。本选项将num添加到基本MAC地址的最后一个字节。在此过程中,如果任何增量导致最后一个字节超过0xFF,它将增加到0x00。
[-r] FILENAME
读取和执行脚本。
如果指定了FILENAME,VPCS在启动时会读取并执行FILENAME中的命令。FILENAME必须是VPCS脚本文件格式。默认情况下,如果启动VPCS的目录中存在一个名为startup.vpc的文件,那么当VPCS启动时将被读取并执行。如果最后一个参数是 FILENAME,那么 -r 选项是可选的。
-e
Tap模式(仅Linux,使用 /dev/tapx)。
在支持/dev/tapx接口(Unix/Linux)的系统上,以tap模式而不是UDP模式运行VPCS。在tap模式下,IP数据包通过 /dev/tapx 接口发送和接收,而不是通过UDP流。通常情况下,/dev/tapx接口只对root用户开放,这意味着VPCS也需要以root用户(sudo vpcs -e)才能使用tap模式。
[-u]
UDP模式。这是默认选项,不是必需的,但与-e选项关联时才包含该选项。默认情况下,VPCS会在指定的UDP端口发送和接收IP数据包。默认侦听UDP端口20000,发送到端口127.0.0.1:30000。侦听和发送端口可以使用-s,-c和-t选项进行设置。
UDP Mode Options
-s port
本地UDP端口,默认20000。
port 指定了VPCS用来监听消息的端口号。默认情况下,VPCS使用UDP端口20000到20008来监听消息。通过使用 -s 选项改变VPCS监听的端口,会导致从端口指定的端口开始使用9个连续的 UDP 端口。
-c port
远程UDP端口。VPCS将数据包串流到从127.0.0.1:30000开始的9个UDP端口。本选项允许你将数据包串流到从端口指定的基本端口号开始的另一组9个端口。
-t ip
远程主机IP。默认情况下,VPCS将数据包传输到从127.0.0.1:30000开始的9个UDP端口。本选项允许您将数据包流式传输到由IPv4地址ip指定的远程主机。通常情况下,远程主机将运行 dynamips,其云连接配置为连接到该主机的IP地址。
TAB Mode Options
-d device
设备名称,只有当-i设置为1时才有效。
Hypervisor Mode Options
-H port
以hypervisor模式运行,监听由port指定的TCP端口。在hypervisor模式下,你可以用telnet连接这个控制端口,启动或停止VPCS实例。
例子
无命令行选项
如果不带任何参数启动VPCS,VPCS将在当前目录中查找脚本startup.vpc。如存在即运行。命令行:vpcs
使用另一个文件启动VPCS
若以名为alternate.vpc 的脚本文件启动VPCS,请使用文件名作为参数:vpcs alternate.vpc
运行9台以上的虚拟PC
假设需要9台以上的虚拟PC,所以你希望在本地主机上运行VPCS的第2个实例,你必须考虑:
1、第2个实例的VPCS的MAC地址必须不同。
2、第2个实例的“local”(本地)或监听UDP端口号必须与第1个实例不同。
3、第2个实例的远程UDP端口号必须与第1个实例不同。
因为默认的本地监听端口是20000,默认的远程端口是30000,因此需要用本地监听端口20009(或更高)和远程端口30009(或更高)来启动VPCS。你还希望基本MAC地址至少偏移9以避免任何冲突。在这种情况下,你将使用下命令:
vpcs -s 20009 -c 30009 -m 9
运行9台以上虚拟机的更好方法是使用Hypervisor模式。在Hypervisor模式下,vpcs将自动处理MAC地址和UDP端口号的递增,因此这里没有冲突。
基本接口
VPCS为用户提供一个命令行界面(除非 -p 选项调用了守护模式)。界面提示通过括号中的VPC号指示9台虚拟机中的哪个当前有焦点。如:
VPCS[1]>
括号内的数字1表示VPC 具有焦点,任何产生的流量都将从VPC 1发送,基本命令将与VPC 1相关。
注意:使用 -i 1选项启动时,VPC1始终具有焦点,提示符不显示括号内的 VPC号,例如:
VPCS>
支持的基本命令:
?
显示帮助
! COMMAND [ARG ...]
使用可选的ARG(参数)作为参数调用OS命令。
digit
直接输入数字以切换到VPC号,范围1至9。
ARP [digit|all]
是show arp的简写,显示VPC号的arp表(默认为当前VPC)或所有的VPC的arp表。
clear ip|ipv6|arp|neighbor|hist
清空IPv4/IPv6、arp/邻居缓存、命令行历史记录。
例子:clear ip #清空了地址/掩码,网关,DNS,DHCP
dhcp [OPTIONS]
是dhcp的简写,尝试通过DHCP获取IPv4地址、掩码、网关和DNS。
disconnect
退出telnet会话(守护模式)
echo TEXT
输出文本
help
显示帮助
history
show history的简写,显示历史记录。
IP ARG .... [OPTION] ....
配置当前VPC的IP地址。
ARG ......:
地址 [掩码] [网关]
地址 [网关] [掩码]
设置VPC的IP,默认网关和网络掩码。默认IPv4掩码是/24,IPv6是/64。
例如:IP 10.1.1.1.1.70/26 10.1.1.1.1.65
将VPC的IP设置为10.1.1.70,网关设置为10.1.1.65,掩码设置为255.255.255.192;
在tap模式下,tapx的ip是子网的最大主机ID。在上面的例子中,tapx的
ip是10.1.1.1.126。掩码可以写成 /26、26、255.255.255.192。
auto 尝试使用SLAAC获取IPv6地址、掩码和网关。
dhcp [OPTION] 试图通过DHCP获取IPv4地址、掩码、网关和DNS
-d 显示DHCP数据包解码
-r 续订DHCP租约
-x 释放DHCP租约
dns ip 设置DNS服务器的ip,如果ip为“0”则删除。
domain NAME 将本地域名设置为NAME。当使用支持名字的命令时,域名将被添加到主机名中。例如:域名
设置为example.com,那么命令ping abcd将导致VPCS尝试解析abcd.example.com这个名字。
load [FILENAME]
从FILENAME加载配置/脚本文件。如果文件名以“.vpc”结尾,则可以省略“.vpc”。如果省略了FILENAME,那么startup.vpc 将被加载(如果存在)。加载文件时,文件的每一行都作为VPCS命令执行;如果echo标志的状态为on,那么命令在执行前会回传到控制台,但以下情况除外:
⏲ 如果命令以“ @”符号为前缀,例如:@set echo color red
⏲ 如果是echo命令
⏲ 如果是sleep命令
注意:如果echo为on,命令sleep 0将被回显;Ctrl+C可中断运行中的脚本。
请参见set echo和show echo。
ping HOST [OPTION ...]
用ICMP(默认值)或TCP/UDP来ping网络上的HOST,HOST可以是一个IP地址或名称。
Options:
-1 ICMP模式,默认
-2 UDP模式
-3 TCP模式
-c count 包数,默认为5
-D 设置 "不分段"位
-f FLAG 设置Tcp头部FLAG| C| E | U | A | P | R | S | F
Bits| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
-i ms 发送的每个数据包之间等待ms毫秒
-l size 数据大小
-P protocol 在ping数据包中使用IP协议
1 - ICMP(默认),17 - UDP,6 - TCP
-p port 目的端口
-s port 源端口
-t ttl 设置ttl,默认为64
-t 发送数据包,直到被Ctrl+C打断为止
-w ms 等待毫秒数以接收响应
注1. 使用名称需要设置DNS。
注2. 使用Ctrl+C停止该命令。
quit
退出本程序。
relay ARG ...
配置UDP端口之间的数据包中继。
relay命令使VPCS成为虚拟配线架,可以在其中使用本命令动态改变连接。使用VPCS作为虚拟配线架需要三个步骤。
1. 必须使用relay portport命令定义一个relay hub port。
2. 远程NIO_UDP连接(GNS3中的云连接)使用这个hub port作为远程端口,以确保每个NIO_UDP连接都有一个唯一的本地端口。本地端口号将被用来 "修补 "连接)。VPC 实例可以使用命令设置 rport port 作为其远程端口。
3. 使用以下命令完成 "打补丁"。
relay add [ip1:]port1[ip2:]port2,port1和port2是步骤2中使用的本地端口号。
ARG:
add [ip1:]port1 [ip2:]port2
中转IP1和IP2之间的数据包
del [ip1:]port1 [ip2:]port2
删除中继规则
DEL id
删除中继规则
dump [on|off]
将中继数据包转发到文件中
port port
设置中继HUB端口
show
显示中继规则
注:IP1和IP2默认为127.0.0.1。
rlogin [ip] port
远程登录到ip主机上的端口(相对于主机PC),例如:
要连接到运行在本主机的端口2000上的虚拟路由器的控制台,请使用rlogin 2000,要远程登录到远程主机10.1.1.1的端口2004,请使用rlogin 10.1.1.1 2004
save [FILENAME[.vpc]]
将配置保存到脚本文件:FILENAME.vpc。如果文件名中没有“.”,则添加“.vpc”扩展名。如果省略文件名,则配置将保存到startup.vpc。
set ARG ...
设置主机名,连接的端口,ipfrag状态,dump选项和echo选项
ARG:
dump FLAG[[FLAG]...] 设置此VPC的packet dump flags(数据包转储标志)
FLAG:
all 匹配所有的数据包(包括进入的包)
detail 显示协议
file 将数据包转储到文件'vpcs[id]_yyyymmddHHMMSS.pcap'
off 清除所有FLAG
mac 显示硬件MAC地址
raw 显示前40个字节
举例:set dump raw #显示数据包的前40字节
ping 23.0.0.1 #发出ICMP包
发出和回应的包结构如下: