前段时间有个需求,需要在一台服务器上配置多个不同vlan的IP,折腾半天,终于搞定。
需求:在一台Linux服务器单网卡上配置属于不同vlan的IP,要求按照来访问的IP原路返回。
我是在Centos 6.2 64位系统上操作的
配置过程:
1、首先确认Linux系统内核是否已经支持VLAN功能,加载了8021q模块,lsmod |grep 8021q
2、关于网卡的解释,好多人不知道网卡接口上的冒号和点好的区别,以下是一些解释(我也是从网上查的,仅供参考)
a、物理网卡:物理网卡指的是服务器上实际的网络接口设备,如在系统中看到的2个物理网卡分别对应是eth0和eth1这两个网络接口。
b、子网卡:子网卡并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用时(Down状态)这些子网卡也将一同不能工作。
c、虚拟VLAN网卡:这些虚拟VLAN网卡也不是实际上的网络接口设备,也可以作为网络接口在系统中出现,但是与子网卡不同的是,他们没有自己的配置文件。他们只是通过将物理网加入不同的VLAN而生成的VLAN虚拟网卡。如果将一个物理网卡添加到多个VLAN当中去的话,就会有多个VLAN虚拟网卡出现,他们的信息以及相关的VLAN信息都是保存在/proc/net /vlan/config这个临时文件中的,而没有独自的配置文件。它们的网络接口名是eth0.1、eth1.2这种名字。
3、系统上的配置(我以在eth1网卡上添加2个vlan为例)
a、如果系统没有自带vconfig包,则先安装vconfig包
b、vconfig add eth1 4
vconfig add eth1 5
c、对这两个虚拟vlan网卡配置IP
ifconfig eth1.4 A.A.A.A netmask 255.255.255.0 up
ifconfig eth1.5 B.B.B.B netmask 255.255.255.0 up
d、重启网卡
/etc/init.d/network restart
此时ifconfig会看到eth1.4 和eth1.5的信息,这样你的虚拟网卡已经配置成功了,route -n也会看到路由信息。
e、编辑记录路由表的文件
/etc/iproute2/rt_tables 此文件存有linux 系统路由表默认表有255 254 253三张表
在该文件最下方,添加如下(cl4、cl5是我起的路由表的名称)
252 cl4
251 cl5
f、先清空路由表
ip route flush table cl4
ip route flush table cl5
g、添加规则
ip rule add from A.A.A.A table cl4
ip rule add from B.B.B.B table cl5
h、添加路由(此处路由已X.X.X.254为例)
ip route add default via A.A.A.254 dev eth1.4 src A.A.A.A table cl4
ip route add default via B.B.B.254 dev eth1.5 src B.B.B.B table cl5
此时系统部分已经配置完成了,但是为了防止重启无效,要将这些配置写到脚本里,开机执行哦!
4、网络配置
在该服务器的物理网卡接的交换机端口上,改成trunk口,并允许配置的那些vlan通过。也要保证从接入交换机和核心整个链路上均允许这些vlan通过。
还有一点,就是在接入设备上一定呀创建vlan4,vlan5,否则会一直不通哦!!!
一切配置Ok后,就会通了,你也可以抓包看下哈,从另一台服务器上访问本来机器,看是不是原路返回。
5、问题
但配置完这些后,还有一个问题没有解决,也请各位高手指点
外面的服务器来访问我这边机器OK,没问题,但是我这台机器只能通过默认路由去访问其他机器,不能指定源IP去访问,请高手赐教呀!