Linux 设置 多ip,多vlan

 

引:在Linux下有时候需要给一个网卡绑定多个IP,本文介绍在Redhat系列(redhat,Fedora Core,Centos)中的实现方法和一种在Gentoo等其他Linux中普遍适用的方法。

 

在Linux下有时候需要给一个网卡绑定多个IP,本文介绍在Redhat系列(redhat,Fedora Core,Centos)中的实现方法和一种在Gentoo等其他Linux中普遍适用的方法。

 

1、单网卡绑定多IP在Redhat系列中的实现方法

 

假设需要绑定多IP的网卡是eth0,请在/etc/sysconfig/network-scripts目录里面创建一个名为ifcfg-eth0:0的文件,

 

内容样例为:

 

DEVICE=”eth0:0″

IPADDR=”192.168.0.2″

BROADCAST=”172.168.0.255″

NETMASK=”255.255.255.0″

ONBOOT=”yes”

其中的DEVICE为设备的名称,

IPADDR为此设备的IP地址,

BROADCAST是广播地址,

NETMASK为子网掩码,

ONBOOT 表示在系统启动时自动启动。

如果需要再绑定多一个IP地址,

只需要把文件名和文件内的DEVICE中的eth0:x加一即可。

LINUX最多可以支持255个IP别名

 

2、普遍适用的单网卡绑定多IP实现方法

 

ifconfig eth0:1 192.168.0.3 broadcast 192.168.0.255 netmask 255.255.255.0

可以把上述命令加在启动自运行文件里面,在Gentoo下是/etc/conf.d/local.start,而某些版本的Linux是/etc/rc.d/rc.local。

 

3、多网卡共用单IP的实现方法

 

使用多块网卡虚拟成为一块网卡,具有相同的IP地址。这项技术其实在sun和cisco中已经存在,分别称为 Trunking和 etherchannel技术,在linux中,这种技术称为bonding。因为bonding在内核2.4.x中已经包含了,只需要在编译的时候把网 络设备选项中的 Bonding driver support选中就可以了。

 

然后,重新编译核心,重新起动计算机,执行如下命令:

 

modprobe bonding miimon=100 mode=0

 ifconfig bond0 202.100.1.2 netmask 255.255.255.0 up

ifenslave bond0 eth0 eth1

现在两块网卡已经象一块一样工作了,这样可以提高集群节点间的数据传输。

 

你最好把这几句写成一个脚本,再由/etc/rc.d/rc.local或者/etc/conf.d/local.start调用,以便一开机就生效。

 

bonding对于服务器来是个比较好的选择,在没有千兆网卡时,用两三块100兆网卡作 bonding,可大大提高服务器到交换机之间的带宽。但是需要在交换机上设置连接bonding 网卡的两个口子映射为同一个虚拟接口。

 

永久性的捆绑口配置

eth0  eth2捆绑成bond0使用 配置一相IP地址

1、加载bonding 模块

    modprobe bonding

2、修改网卡配置文件

 vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

TYPE=Ethernet

ONBOOT=yes

IPV6INIT=no

USERCTL=no

 

 vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

 

vi /etc/sysconfig/network-scripts/ifcfg-eth2

DEVICE=eth2

BOOTPROTO=none

ONBOOT=yes

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

 

3、加载模块配置文件

 vi /etc/modprobe.d/bonding.conf

alias bond0 bonding

alias bond1 bonding

options bond0 mode=0 miimon=200

options bond1 mode=0 miimon=200

 

mode指定了bond0的工作模式,常用的是0和1,0表示负载均衡方式,1表示主从方式,可根据需要自行配置。常用的为0,1两种。mode=0表示 load balancing (round-robin)为负载均衡方式,两块网卡都工作。

                mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。bonding只能提供链路监测,即从主机到交换机的链路是否接通。

                如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用。 miimon是用来进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,

                如果有一条线路不通就转入另一条线路。

                    bonding mode=1 miimon=100.miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,

Bonding的模式一共有7种:

#defineBOND_MODE_ROUNDROBIN       0   balance-rr模式)网卡的负载均衡模式

#defineBOND_MODE_ACTIVEBACKUP     1   active-backup模式)网卡的容错模式

#defineBOND_MODE_XOR              2   balance-xor模式)需要交换机支持

#defineBOND_MODE_BROADCAST        3    broadcast模式)

#defineBOND_MODE_8023AD           4   IEEE 802.3ad动态链路聚合模式)需要交换机支持

#defineBOND_MODE_TLB              5   自适应传输负载均衡模式

#defineBOND_MODE_ALB              6   网卡虚拟化方式

 

mode=0:平衡负载模式,有自动备援,但需要”Switch”支及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

 mode=6:平衡负载模式,有自动备援,不需要”Switch”支及设定。

 

 

 

4、查看网卡绑定信息

cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

 

Bonding Mode: load balancing (round-robin)

MII Status: up

MII Polling Interval (ms): 200

Up Delay (ms): 0

Down Delay (ms): 0

 

Slave Interface: eth0

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 3

Permanent HW addr: 00:1b:cd:04:17:70

Slave queue ID: 0

 

Slave Interface: eth2

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 2

Permanent HW addr: 00:1b:cd:04:17:72

Slave queue ID: 0

 

 

-----

 

设置linux的vlan脚本

 

下面是脚本vlan.sh

#!/bin/bash

 

echo 1 > /proc/sys/net/ipv4/ip_forward

vconfig add eth0 51

ip address add 217.221.181.1/24 dev eth0.51

ip link set dev eth0.51 up

 

vconfig add eth0 52

ip address add 217.221.182.1/24 dev eth0.52

ip link set dev eth0.52 up

 

vconfig add eth0 53

ip address add 217.221.183.1/24 dev eth0.53

ip link set dev eth0.53 up

 

在rc.local中启动

--------------

 

透過 VLan 的功能能將一個實體的 switch 將他切割成多個 logical broadcast domain (所有的廣播封包 broadcast package 只會在此 doamin 中傳送).他的做法也很簡單就是在原先的訊框 (Frame) 指定 tag 而這 tag 的數字即是 VLAN ID. VLAN 已經被 IEEE 列為標准協定的一員 802.1q一開始沒設定任何 VLAN 的 switch 其所有的網路埠的 VLAN ID 皆為 1.

 

 

Linux 的核心也是有支援 VLAN 功能,主要就是在網路埠上的訊框加上指定的 VLAN Tag .設定使用上很簡單.只要 2 步驟即可.

 

步驟一

目前 RedHat 是將 VLAN 編譯成模組的方式來支援,所以先看看你的 Linux 是否已經掛載了 802.1q(VALN) 的模組.

 

[root@benjr ~]# modprobe 8021q

[root@benjr ~]# lsmod |grep -i 8021q

步驟二

開始設定 VLAN ID .我們透過指令 #vconfig add [interface-name] [vlan_id] 這邊要注意的一點是要設定網路裝置 [interface-name] 必須是 active 的,可以透過 #ifconfig 查詢到的.[vlan_id] 可以為 0-4095.

 

[root@benjr ~]# vconfig add eth0 10

這樣系統就會多出一組 eth0.10 的裝置出來,這裝置將只接受含有 VLAN ID =10 的訊框.所有設定好的 VLAN 網路埠都可以透過 /proc/net/vlan/config 來查詢到.不過這樣的設定下次重新開機就會失效了,還需要將他寫在 /etc/rc.local,讓他在開機時候就會生效.如果是要立即移除時可使用 #vconfig rem [vlan-name] 來移除.

 

不過這並不符合我當初的構想是將 Linux 下多個網路埠把他當成可以使用 VLAN 的 switch.

 

參考文件 http://linux.vbird.org/somepaper/20060622-linux_vlan.pdf

 

不過這樣的應用我不是很懂為什麼要將一個網路埠切割成多個並將子埠指派不同的 VLAN ID.上網查了一下似乎有一種應用叫做單臂路由器 one-armed-router,是用來在多個虛擬網路中傳送封包.而一個單臂路由器上所連接網路埠都是再同一個實體網路埠上.看起來不是很懂還是有其 他的應用方式.

 

 

 

 

linux VLAN配置(vconfig)

 

安装vlan(vconfig)和加载8021q模块

[root@test0001~]#yum install vconfig

[root@test0001~]#modprobe 8021q

[root@test0001~]#lsmod |grep -i 8021q

 

使用linux vconfig命令配置vlan

[root@test0001~]#vconfig add eth0 100

Added VLAN with VID == 100 to IF -:eth0:-

[root@test0001~]#vconfig add eth0 200

Added VLAN with VID == 200 to IF -:eth0:-

#在eth0接口上配置两个VLAN

[root@test0001~]#vconfig set_flag eth0.100 1 1

Set flag on device -:eth0.100:- Should be visible in/proc/net/vlan/eth0.100

[root@test0001~]#vconfig set_flag eth0.200 1 1

Set flag on device -:eth0.200:- Should be visible in/proc/net/vlan/eth0.200

#设置VLAN的REORDER_HDR参数,默认就行了。

#可以使用cat /proc/net/vlan/eth0.100查看eth0.100参数

[root@test0001~]#ifconfig eth0 0.0.0.0

[root@test0001~]#ifconfig eth0.100 172.16.1.8 netmask 255.255.255.0up

[root@test0001~]#ifconfig eth0.200 172.16.2.8 netmask 255.255.255.0up

#配置网络信息

[root@test0001~]#vconfig rem eth0.100

Removed VLAN -:eth0.100:-

[root@test0001~]#vconfig rem eth0.200

Removed VLAN -:eth0.200:-

#删除VLAN命令

#将VLAN信息写入配置文件(/etc/rc.local)中,下次随机启动。

 

添加虚拟设备

 

vconfig add eth0 192

cd /etc/sysconfig/network-scripts

cp ifcfg-eth0 ifcfg-eth0.192

编辑ifcfg-eth0.192 将eth0改成eth0.192

编辑ETH0将关于ip的删除

 

开机启动802.1q

 

在/etc/sysconfig/network键入VLAN=yes

开机保留vlan配置:编辑/etc/rc.local

添加如下内容:

modprobe 8021q

vconfig add eth0 192

ifconfig eth0.192 103.246.132.108/24 up

 

检查vlan信息

tail /proc/net/vlan/bond0.1010

          total bytes received      8645890

      Broadcast/Multicast Rcvd            0

 

      total frames transmitted          160

       total bytes transmitted         7236

            total headroom inc            0

           total encap on xmit            0

Device: bond0

INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0

 EGRESS priority mappings:

 

cat /proc/net/vlan/p2p2.20

p2p2.20  VID: 20         REORDER_HDR: 1  dev->priv_flags: 1

         total frames received  46538248681

          total bytes received 38589078808915

      Broadcast/Multicast Rcvd        31239

 

      total frames transmitted  46432764217

       total bytes transmitted 14521448636338

            total headroom inc            0

           total encap on xmit            0

Device: p2p2

INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0

 EGRESS priority mappings:

 

检查vlan配置

cat /proc/net/vlan/config

VLAN Dev name    | VLAN ID

Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD

p2p2.20        | 20  | p2p2

em1.26         | 26  | em1

em2.25         | 25  | em2

em2.18         | 18  | em2

p2p1.19        | 19  | p2p1