华为、新华三交换机配VLAN方法

为什么要划分VLAN?懂的都懂,TL;DR

平时华为和新华三(H3C)的设备都有接触,两边命令大同小异,但偏偏就差的那几个词最容易出事。这篇文章按实际干活的顺序记一遍,顺手把两家的差异标出来,以后自己忘了也能翻回来抄。

开工前的准备

以前我也犯过“拿着配置线就冲上去”的毛病,后来学乖了。开工前在工单里写几行字:VLAN ID 和用途、哪些口接终端哪些口上联、Trunk 要放哪些 VLAN、每个 VLAN 的网关地址、对端交换机的接口编号。

最后那条尤其重要。配 Trunk 的时候你只看得见自己这头,对端是谁、哪个口,全靠事先记下来。

先花五分钟想清楚,比配完再返工划算。

连上交换机

Console、SSH、Telnet 都行。Console 串口参数一般是 9600、8N1,现场设备重启或者网络不通的时候,还是这根线靠谱。生产环境优先 SSH,Telnet 是明文,一般只在应急时用。

老设备有个烦人的点,它的SSH算法是RSA的,新版 OpenSSH 客户端默认把它禁了,需要加一个参数,让他指定使用RSA算法。

1
ssh -oHostKeyAlgorithms=+ssh-rsa admin@192.168.1.254

要是还协商失败,多半密钥交换和HMAC算法也老,一起放宽:

1
ssh -oHostKeyAlgorithms=+ssh-rsa -oKexAlgorithms=+diffie-hellman-group1-sha1 -oMACs=+hmac-sha1 admin@192.168.1.254

重置密码

有时候设备是二手的,或者密码是上一任网管留的,手上根本没有。华为和华三的 Console 口都支持通过重启中断引导来跳过认证,进去之后再把密码改掉。

华为设备重启后,在启动界面出现提示时按 Ctrl+B 进入 BootROM 菜单,输入 BootROM 密码(默认一般是 Admin@huawei.com),选择清除 Console 口密码,然后重启。重启后 Console 登录就不需要密码了,进系统视图用 user-interface console 0 下的 authentication-mode password 重新设一个。

华三类似,重启过程中按 Ctrl+B 进 BootWare 菜单,选跳过当前配置启动(Skip current configuration file),启动后是空配置,原来的密码自然就没了。但要注意,跳过配置启动后如果直接 save,会把原来的配置覆盖掉,正确做法是先 display current-configuration 把原配置导出来,改完密码再恢复。

两家都别忘了:改完密码一定要 save,不然重启一次又回到原点。

查看当前配置

连上以后第一件事一定是看现状:

1
2
3
4
5
<Huawei/H3C> display version
<Huawei/H3C> display current-configuration
<Huawei/H3C> display vlan
<Huawei/H3C> display port vlan
<Huawei/H3C> display interface brief

进入系统视图

先别急着敲 vlan 10,你这时候在用户视图(尖括号那个 <Huawei> 或者 <H3C>),除了看和测什么都配不了。得先:

1
2
<Huawei> system-view
[Huawei]

华三一样,system-view,懒的时候敲 sys 也行。提示符从尖括号变方括号就对了。

创建VLAN

华为批量用 batch:

1
2
[Huawei] vlan batch 10 20 30
[Huawei] vlan batch 10 to 20

华三没有 batch 这个词,连续的直接写:

1
[H3C] vlan 10 to 20

不连续的还是老老实实一个一个进 vlan 10、quit、vlan 20。

配置接口VLAN

华为接口名称是 GigabitEthernet,常简写为 GE,华三同样叫 GigabitEthernet,简写也是 GE,两家在这点上倒是一致的。但华为是从 GigabitEthernet 0/0/1 这种槽位编号开始数的,华三则是 GigabitEthernet 1/0/1,第一位是堆叠或机框编号。所以配之前先 display interface brief 看一眼实际的接口名。

配置Access接口

Access口接终端,华为是 port default vlan 10,华三是 port access vlan 10,这俩别记混。

1
2
3
[Huawei] interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1] port link-type access
[Huawei-GigabitEthernet0/0/1] port default vlan 10
1
2
3
[H3C] interface GigabitEthernet 1/0/1
[H3C-GigabitEthernet1/0/1] port link-type access
[H3C-GigabitEthernet1/0/1] port access vlan 10

华为老版本上常见 port access vlan,新设备用 port default vlan。

配置Trunk口

Trunk口是交换机之间互联的,华为放行用 allow-pass,华三用 permit:

1
2
3
[Huawei] interface GigabitEthernet 0/0/24
[Huawei-GigabitEthernet0/0/24] port link-type trunk
[Huawei-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20
1
2
3
[H3C] interface GigabitEthernet 1/0/24
[H3C-GigabitEthernet1/0/24] port link-type trunk
[H3C-GigabitEthernet1/0/24] port trunk permit vlan 10 20

批量配置

单个端口配一两个还行,一台48口交换机要划20个口进VLAN 10,你还一个个敲,那不是勤快,是跟自己过不去。

华为这边有两个东西。port-group 是建一个带名字的组,端口加进去,组会留在配置里,以后还能再进去改,适合那种这组口长期就这套策略的情况:

1
2
3
4
[Huawei] port-group pg-access-10
[Huawei-port-group-pg-access-10] group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/20
[Huawei-port-group-pg-access-10] port link-type access
[Huawei-port-group-pg-access-10] port default vlan 10

group-member 后面 to 一连就是一片,不连续的拿空格隔开写也行。

另一种是 interface range,临时组,进去批量下发,quit 出来组就没了,配置里不留东西。就调一次的话我更爱用这个:

1
2
3
4
[Huawei] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/20
[Huawei-port-group] port link-type access
[Huawei-port-group] port default vlan 10
[Huawei-port-group] quit

有几条限制得知道:华为这个 interface range 里 to 两头得在同一块接口板上,跨板卡就拆成几条写,别硬塞。如果不用 to 而是逐个列接口,就没这些限制。另外永久端口组的数量和每组成员数都有上限,常见规格是组上限 32、每组 48 个成员,别当无限容器用。

华三那边,interface range 一样好使:

1
2
3
4
[H3C] interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/20
[H3C-if-range] port link-type access
[H3C-if-range] port access vlan 10
[H3C-if-range] quit

它比华为那个宽松些,能把物理口和VLAN接口这类不同类型的东西放进同一个范围里批量执行。但有个代价:批量视图下只能执行“列表里第一个接口”支持的命令,第一个接口不支持的,就算别的成员口支持也敲不了。所以混着用的时候,把最有代表性的接口写在最前面。

要长期复用的组,华三用 port-group manual:

1
2
3
4
[H3C] port-group manual pg-access
[H3C-port-group-manual-pg-access] group-member GigabitEthernet 1/0/1 to GigabitEthernet 1/0/20
[H3C-port-group-manual-pg-access] port link-type access
[H3C-port-group-manual-pg-access] port access vlan 10

这个组只能塞二层以太口,混不了逻辑接口。

华三还有个折中的写法,给一组接口起个别名,能复用又不占端口组资源:

1
2
3
[H3C] interface range name acc10 interface GigabitEthernet 1/0/1 to GigabitEthernet 1/0/20
[H3C] interface range name acc10
[H3C-if-range] port access vlan 10

另外华三可以直接在 VLAN 视图下把一串口拉进来,等价于把它们设成 Access 并加入这个 VLAN:

1
2
[H3C] vlan 10
[H3C-vlan10] port GigabitEthernet 1/0/1 to GigabitEthernet 1/0/20

只批量改物理口,两种都行;要混逻辑接口,用 interface range;策略要长期复用,用命名组。

配VLAN接口

VLAN 之间默认二层隔离,要通就得给每个 VLAN 配个三层地址。华为叫 Vlanif,华三叫 Vlan-interface,中间那个连字符别省:

1
2
[Huawei] interface Vlanif 10
[Huawei-Vlanif10] ip address 192.168.10.1 24
1
2
[H3C] interface Vlan-interface 10
[H3C-Vlan-interface10] ip address 192.168.10.1 24

有个现象容易误判:VLAN 里如果一个 up 的物理口都没有,对应的 Vlanif 也不会 up。display ip interface brief 里看到 down,先别怀疑地址写错了。另外,终端那边网关要指到这个地址。

配置DHCP

小局点没必要单开一台DHCP服务器,交换机就能发地址。两家都得先开全局开关,这个最容易忘——不开的话接口下配了也不响应,还不报错。

华为:

1
2
3
4
5
6
7
8
[Huawei] dhcp enable
[Huawei] ip pool vlan10
[Huawei-ip-pool-vlan10] network 192.168.10.0 mask 24
[Huawei-ip-pool-vlan10] gateway-list 192.168.10.1
[Huawei-ip-pool-vlan10] dns-list 223.5.5.5 119.29.29.29
[Huawei-ip-pool-vlan10] lease day 1 hour 0 minute 0
[Huawei-ip-pool-vlan10] excluded-ip-address 192.168.10.2 192.168.10.10
[Huawei-ip-pool-vlan10] static-bind ip-address 192.168.10.100 mac-address 00e0-fc12-3456

华三:

1
2
3
4
5
6
7
8
[H3C] dhcp enable
[H3C] ip pool vlan10
[H3C-ip-pool-vlan10] network 192.168.10.0 24
[H3C-ip-pool-vlan10] gateway 192.168.10.1
[H3C-ip-pool-vlan10] dns server 223.5.5.5
[H3C-ip-pool-vlan10] lease day 1 hour 0 minute 0
[H3C-ip-pool-vlan10] excluded-ip-address 192.168.10.2 192.168.10.10
[H3C-ip-pool-vlan10] static-bind ip-address 192.168.10.100 mac-address 00e0-fc12-3456

老华三(Comware 5)这几个词不一样:network 192.168.10.0 mask 255.255.255.0、gateway-list、dns-list、lease 0 1 0。碰到老设备就按这套写。

池子建好只是“备好了货”,还得挂到接口上,否则那个 VLAN 里的广播没人接:

1
2
3
[Huawei] interface Vlanif 10
[Huawei-Vlanif10] ip address 192.168.10.1 24
[Huawei-Vlanif10] dhcp select global
1
2
3
[H3C] interface Vlan-interface 10
[H3C-Vlan-interface10] ip address 192.168.10.1 24
[H3C-Vlan-interface10] dhcp select global

dhcp select global 意思是“用全局地址池”。华为还有个 dhcp select interface,直接拿接口地址所在网段自动建池,省事但可控性差,我一般还是显式建池。

几个数值上的建议:

  • gateway-list / gateway 填的地址要跟 Vlanif 地址一致,不然客户端拿到了也出不去;

  • excluded-ip-address 把网关、打印机、AP 这些静态占用的段排除掉,免得冲突;

  • lease 别给太短,办公网一天或三天都行,短了客户端频繁续租,日志能刷爆;

  • static-bind 是给打印机、门禁这类要固定地址又不想手配的设备用的,按 MAC 绑。

配置DHCP中继

如果想要统一管理DHCP,可以在核心交换机或专用服务器上建池,各接入交换机的 VLAN 接口只做中继,把请求转过去。

客户端发的是广播,跨不过 VLAN,所以得有个“传话的”。中继不发消息,只把广播转成单播丢给服务器。

典型场景:地址池和服务器在 VLAN 10,VLAN 20 的终端也要拿地址。在 VLAN 20 的网关设备上这么配:

1
2
3
4
5
[Huawei] dhcp enable
[Huawei] interface Vlanif 20
[Huawei-Vlanif20] ip address 192.168.20.1 24
[Huawei-Vlanif20] dhcp select relay
[Huawei-Vlanif20] dhcp relay server-ip 192.168.10.100
1
2
3
4
5
[H3C] dhcp enable
[H3C] interface Vlan-interface 20
[H3C-Vlan-interface20] ip address 192.168.20.1 24
[H3C-Vlan-interface20] dhcp select relay
[H3C-Vlan-interface20] dhcp relay server-address 192.168.10.100

命令名就差在这里:华为 server-ip,华三 server-address。两家都支持配多个服务器做冗余,也都有 dhcp relay link-address,一般不用动,除非服务器侧要按指定源地址回包。

中继这边有两个前提,缺一个客户端就拿不到地址:

  1. 这个 VLAN 接口必须有 IP(它就是报文里的 giaddr,没 IP 中继起不来);

  2. DHCP服务器必须有一条回 192.168.20.0/24 的路由。

    DHCP服务器只会把回包发给 giaddr,中间任何一跳没路,包就没了。这也是中继问题里最常见的一半原因。

    如果交换机上开了 DHCP snooping,中继经过的口要标成 trust,否则报文会被当成非法 DHCP 流量丢掉:

    1
    2
    [Huawei] interface GigabitEthernet 0/0/24
    [Huawei-GigabitEthernet0/0/24] dhcp snooping trusted
    1
    2
    [H3C] interface GigabitEthernet 1/0/24
    [H3C-GigabitEthernet1/0/24] dhcp snooping trusted

配路由

让三层交换机当网关,提高跨三层转发效率,数据不用先传到路由器再传回来。

先分清哪些路是白送的:同一台交换机上配了 Vlanif 的 VLAN,互相之间是直连路由,自动就有了,不用配。要手动配的只有两类——去别的交换机、去核心/上网关。

静态路由两家命令一样,ip route-static:

1
2
[Huawei] ip route-static 0.0.0.0 0 192.168.1.254
[Huawei] ip route-static 192.168.20.0 24 10.0.0.2
1
2
[H3C] ip route-static 0.0.0.0 0 192.168.1.254
[H3C] ip route-static 192.168.20.0 24 10.0.0.2

默认路由的掩码写 0 或 0.0.0.0 都行。做主备链路的话用浮动静态,把备份那条的 preference 调大(两家静态路由默认都是 60):

1
2
[Huawei] ip route-static 0.0.0.0 0 192.168.1.253 preference 100
[H3C] ip route-static 0.0.0.0 0 192.168.1.253 preference 100

设备多、网段多,静态路由维护起来会失控,上 OSPF。两家的写法基本一致,注意 network 后面是反掩码,不是子网掩码:

1
2
3
[Huawei] ospf 1 router-id 1.1.1.1
[Huawei-ospf-1] area 0
[Huawei-ospf-1-area-0.0.0.0] network 192.168.10.0 0.0.0.255
1
2
3
[H3C] ospf 1 router-id 1.1.1.1
[H3C-ospf-1] area 0
[H3C-ospf-1-area-0.0.0.0] network 192.168.10.0 0.0.0.255

router-id 建议显式配,别让它自动挑,不然接口一抖 ID 变了,邻居全重建。老华三(Comware 5)区域要写全 area 0.0.0.0。

验证和保存

配完自查一遍,别急着收工:

1
2
3
<Huawei/H3C> display vlan                 # VLAN 建没建成、端口归到哪
<Huawei/H3C> display port vlan            # 链路类型、放行列表对不对
<Huawei/H3C> display ip interface brief   # Vlanif 地址和状态

然后终端 ping 自己网关,再跨 VLAN ping 一次,通了才算完。

在保存之前,可以先diff看一下当前的配置和系统启动的配置有什么差别。

1
<HUAWEI> compare configuration
1
<H3C> display diff current-configuration

命令是输完以后生效的,但是重启以后会消失,需要保存到Flash。

1
2
<Huawei> save        # 会提示确认,输入 y
<H3C> save force     # 不想被交互提示打断可以带 force

保存命令两家都是 save,回车后提示确认,敲 Y 即可。华为会问是否保存到指定文件,直接回车用默认的 vrpcfg.zip;华三问是否覆盖当前配置文件,同样回车走默认即可。不存的话,前面配的 VLAN、接口、Vlanif 地址,重启全没,白干一场。