2012年11月5日 星期一

OXIM on OpenSuSE 12.2

話說事情演變到gnome3,原本最鍾愛的oxim輸入法框架就不能繼續使用了,很是痛苦。嘗試著自己編譯,可是經常不知道我到底要修改的是Makefile本身還是source code,我完全不懂qt/gtk阿!但是很榮幸的得到黑眼珠大大的鼎力相助,現在在OpenSuSE 12.2上面我終於可以快樂的使用oxim了!

zypper ar obs://home:swyear:oxim15/openSUSE_12.2 oxim
zypper ref oxim
zypper in oxim oxim-setup oxim-filters oxim-tables-popular-zh_TW
像我使用的是amd64的OS,還要在多補一個:
ln -s /usr/lib64/oxim-setup /usr/lib/

重新登入應該就可以使用OXIM了!再次向swyear大大致敬!!

2012年10月31日 星期三

(16) VLAN tagging -- SuSE Linux

Setting up VLAN on SuSE Linux manually

請先確定SuSE上已經安裝了vconfig套件,並且8021q模組已被啟用:

zypper install vconfig
modprobe 8021q
假設eth0的網路是192.168.10.0/24,而switch上另外有兩個VLAN,分別是VLAN5(192.168.100.0/24)/VLAN10(192.168.200.0/24),希望同時能跟這兩個VLAN的網路溝通:
ifcfg-eth0ifcfg-vlan5ifcfg-vlan10
BOOTPROTO='static'
STARTMODE='auto'
IPADDR='192.168.10.198/24'
GATEWAY='192.168.10.1'
USERCONTROL='no'
BOOTPROTO='static'
ETHERDEVICE='eth0'
IPADDR='192.168.100.2/24'
GATEWAY='192.168.100.254'
STARTMODE='auto'
USERCONTROL='no'
VLAN_ID='5'
BOOTPROTO='static'
ETHERDEVICE='eth0'
IPADDR='192.168.200.2/24'
GATEWAY='192.168.200.254'
STARTMODE='auto'
USERCONTROL='no'
VLAN_ID='10'

延續之前的設定:我們已經把eth0/eth1結合成bond0,現在我們又要為bond0加上VLAN tag:vlan5/vlan10。

ifcfg-eth0ifcfg-eth1ifcfg-bond0ifcfg-vlan5ifcfg-vlan10
BOOTPROTO='none'
STARTMODE='auto'
USERCONTROL='no'
BOOTPROTO='none'
STARTMODE='auto'
USERCONTROL='no'
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=6 miimon=100'
BONDING_SLAVE0='eth0'
BONDING_SLAVE1='eth1'
BOOTPROTO='static'
IPADDR='192.168.10.99/24'
GATEWAY='192.168.10.1'
STARTMODE='auto'
USERCONTROL='no'
BOOTPROTO='static'
ETHERDEVICE='bond0'
IPADDR='192.168.200.2/24'
GATEWAY='192.168.200.254'
STARTMODE='auto'
USERCONTROL='no'
VLAN_ID='5'
BOOTPROTO='static'
ETHERDEVICE='bond0'
IPADDR='192.168.200.2/24'
GATEWAY='192.168.200.254'
STARTMODE='auto'
USERCONTROL='no'
VLAN_ID='10'
檢查一下VLAN狀態:
cat /proc/net/vlan/config
VLAN Dev name  | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
vlan10         | 10  | bond0
vlan5          | 5  | bond0
cat /proc/net/vlan/vlan10
vlan10  VID: 10  REORDER_HDR: 1  dev->priv_flags: 1
         total frames received            0
          total bytes received            0
      Broadcast/Multicast Rcvd            0

      total frames transmitted            7
       total bytes transmitted          578
Device: bond0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
 EGRESS priority mappings: 

延續之前的設定:我們已經把eth0/eth1結合成bond0,又在分享了bond0成為br0;現在我們又要為br0加上VLAN tag:vlan5/vlan10。

ifcfg-eth0ifcfg-eth1ifcfg-bond0ifcfg-br0ifcfg-vlan5ifcfg-vlan10
BOOTPROTO='none'
STARTMODE='auto'
USERCONTROL='no'
BOOTPROTO='none'
STARTMODE='auto'
USERCONTROL='no'
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=5 miimon=100'
BONDING_SLAVE0='eth0'
BONDING_SLAVE1='eth1'
BOOTPROTO='static'
IPADDR='0.0.0.0/32'
STARTMODE='auto'
USERCONTROL='no'
BOOTPROTO='static'
BRIDGE='yes'
IPADDR='192.168.10.99/24'
GATEWAY='192.168.10.1'
BRIDGE_FORWARDDELAY='0'
BRIDGE_PORTS='bond0'
BRIDGE_STP='on'
STARTMODE='auto'
USERCONTROL='no'
BOOTPROTO='static'
ETHERDEVICE='br0'
IPADDR='192.168.100.2/24'
STARTMODE='auto'
USERCONTROL='no'
VLAN_ID='5'
BOOTPROTO='static'
ETHERDEVICE='br0'
IPADDR='192.168.200.2/24'
STARTMODE='auto'
USERCONTROL='no'
VLAN_ID='10'

當然如果switch有設定VLAN DHCP服務的話,這裡設定DHCP也行!別忘了重新啟動網路吧!

rcnetwork restart

Setting up VLAN on SuSE Linux by Yast2

我說不出我對於yast有多麼的崇敬,SuSE的yast真的可以說是系統管理工具的楷模,我深信所以試圖寫出比yast更優秀工具的工程師也會覺得黔驢技窮。

在Yast2 -> Network Device裡,可以新增一個網路裝置。
選擇建立VLAN並設定vlan ID。
選擇使用VLAN的實體界面(此例是以bond0為Real Interface,也可以是br0),並設定IP位址。
按下OK就完成了,VLAN10也是如法泡製!非常帥氣的Yast!!!

Share

(15) VLAN tagging -- Redhat Linux

Setting up VLAN on Redhat Linux

請先確定RHEL/Fedora上已經安裝了vconfig套件,並且8021q模組已被啟用:

yum install vconfig
modprobe 8021q
假設eth0的網路是192.168.10.0/24,而switch上另外有兩個VLAN,分別是VLAN5(192.168.100.0/24)/VLAN10(192.168.200.0/24),希望同時能跟這兩個VLAN的網路溝通:
ifcfg-eth0ifcfg-eth0.5ifcfg-eth0.10
DEVICE=eth0
IPADDR=192.168.10.198
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
DEVICE=eth0.5
VLAN=yes
IPADDR=192.168.100.2
NETMASK=255.255.255.0
GATEWAY=192.168.100.254
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
DEVICE=eth0.10
VLAN=yes
IPADDR=192.168.200.2
NETMASK=255.255.255.0
GATEWAY=192.168.200.254
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no

延續之前的設定:我們已經把eth0/eth1結合成bond0,現在我們又要為bond0加上VLAN tag:bond0.5/bond0.10。

ifcfg-eth0ifcfg-eth1ifcfg-bond0ifcfg-bond0.5ifcfg-bond0.10
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=bond0
TYPE=bonding
BOOTPROTO=static
IPADDR=192.168.10.198
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="mode=6 miimon=100"
DEVICE=bond0.5
VLAN=yes
IPADDR=192.168.100.2
NETMASK=255.255.255.0
#GATEWAY=192.168.100.254
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
DEVICE=bond0.10
VLAN=yes
IPADDR=192.168.200.2
NETMASK=255.255.255.0
#GATEWAY=192.168.200.254
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
檢查看看VLAN的狀態:
cat /proc/net/vlan/config
VLAN Dev name  | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
bond0.5        | 5  | bond0
bond0.10       | 10 | bond0
cat /proc/net/vlan/vlan5
bond0.5  VID: 3  REORDER_HDR: 1  dev->priv_flags: 1
         total frames received            0
          total bytes received            0
      Broadcast/Multicast Rcvd            0

      total frames transmitted           53
       total bytes transmitted         6883
            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: 
還沒傳輸什麼資料,所以都是0囉!

可以再更複雜一點:我們已經把eth0/eth1結合成bond0,又再分享了bond0成為br0;現在我們又要為br0加上VLAN tag:br0.5/br0.10。

ifcfg-eth0ifcfg-eth1ifcfg-bond0ifcfg-br0ifcfg-br0.5ifcfg-br0.10
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=bond0
TYPE=bonding
BOOTPROTO=none
#IPADDR=192.168.10.198
#NETMASK=255.255.255.0
#GATEWAY=192.168.10.1
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="mode=6 miimon=100"
BRIDGE=br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.22
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DEVICE=br0.5
VLAN=yes
IPADDR=192.168.100.2
NETMASK=255.255.255.0
GATEWAY=192.168.100.254
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
DEVICE=br0.10
VLAN=yes
IPADDR=192.168.200.2
NETMASK=255.255.255.0
GATEWAY=192.168.200.254
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no

當然如果switch有設定VLAN DHCP服務的話,這裡設定DHCP也行!別忘了重新啟動網路吧!

service network restart

參考文章:

Share

(14) VLAN tagging-- Debian GNU/Linux

Setting up VLAN on Debian GNU/linux

請先確定Debian/Ubuntu上已經安裝了vlan套件,並且8021q模組已被啟用:

aptitude install vlan
modprobe 8021q
假設eth0的網路是192.168.10.0/24,而switch上另外有兩個VLAN,分別是VLAN5(192.168.100.0/24)/VLAN10(192.168.200.0/24),希望同時能跟這兩個VLAN的網路溝通:
auto eth0
iface eth0 inet static
 address 192.168.10.198
 netmask 255.255.255.0
 gateway 192.168.10.1

auto eth0.5
iface eth0.5 inet static
 address 192.168.100.2
 netmask 255.255.255.0
 gateway 192.168.100.254
 
auto eth0.10
iface eth0.10 inet static
 address 192.168.200.2
 netmask 255.255.255.0
 gateway 192.168.200.254
延續之前的設定:我們已經把eth0/eth1結合成bond0,現在我們又要為bond0加上VLAN tag:bond0.5/bond0.10。
auto eth0
iface eth0 inet manual
 bond-master bond0

auto eth1
iface eth1 inet manual
 bond-master bond0

auto bond0
iface bond0 inet static
 address 192.168.10.99
 netmask 255.255.255.0
 gateway 192.168.10.1
 bond-slaves eth0 eth1
 bond-mode 6
 bond-miimon 100
 bond-downdelay 200
 bond-updelay 200

auto bond0.5
iface bond0.5 inet static
 address 192.168.100.1
 netmask 255.255.255.0
 gateway 192.168.100.254

auto bond0.10
iface bond0.10 inet static
 address 192.168.200.1
 netmask 255.255.255.0
 gateway 192.168.200.254
檢查vlan的狀態:
cat /proc/net/vlan/config
VLAN Dev name  | VLAN ID
Name-Type: VLAN_NAME_TYPE_PLUS_VID_NO_PAD
vlan5          | 5  | bond0
vlan10         | 10  | bond0
cat /proc/net/vlan/vlan5
vlan5  VID: 5  REORDER_HDR: 1  dev->priv_flags: 1
         total frames received            0
          total bytes received            0
      Broadcast/Multicast Rcvd            0

      total frames transmitted           35
       total bytes transmitted         7725
Device: bond0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
 EGRESS priority mappings: 
可以在更複雜一點:我們已經把eth0/eth1結合成bond0,又再分享了bond0成為br0;現在我們又要為br0加上VLAN tag:br0.5/br0.10。
auto eth0
iface eth0 inet manual
bond-master bond0

auto eth1
iface eth1 inet manual
bond-master bond0

auto bond0
iface bond0 inet manual
 # address 192.168.10.198
 # netmask 255.255.255.0
 # gateway 192.168.10.1
 bond-slaves eth0 eth1
 bond-mode 5
 bond-miimon 100
 bond-downdelay 200
 bond-updelay 200

auto br0
iface br0 inet static
 address 192.168.10.22
 netmask 255.255.255.0
 gateway 192.168.10.1
 bridge_ports bond0
 bridge_stp off

auto vlan5
iface vlan5 inet static
 vlan-raw-device br0
 address 192.168.100.2
 netmask 255.255.255.0
 gateway 192.168.100.254

auto vlan10
iface vlan10 inet static
 vlan-raw-device br0
 address 192.168.200.2
 netmask 255.255.255.0
 gateway 192.168.200.254
請特別注意兩個VLAN我使用不同的寫法:vlan5以及br0.10。實際上vlan5這種寫法比較直覺且容易閱讀,只是需要多加上vlan-raw-device來宣告原始的裝置為何;至於br0.5雖然比較難馬上看懂(br0.5跟br0:5實在很相似阿!),但是設定檔卻相當好寫!

VLAN真的很容易上手對吧!

參考文章:

Share

(12) NIC bridging -- SuSE Linux

Setting up Bridge on SuSE Linux manually

SuSE Linux裡想要啟用bridge(IEEE 802.1d)功能,必須要先安裝bridge-utils套件;如果系統裡可以執行brctl這個指令,那麼你的系統已經可以建立bridge了。
假設現在要把eth0設定成bridge分享給VM作為與外部溝通的管道:

ifcfg-eth0ifcfg-br0
BOOTPROTO='static'
STARTMODE='auto'
IPADDR='0.0.0.0/32'
USERCONTROL='no'
BOOTPROTO='static'
BRIDGE='yes'
BRIDGE_FORWARDDELAY='0'
BRIDGE_PORTS='eth0'
IPADDR='192.168.10.22/24'
GATEWAY=192.168.10.1
BRIDGE_STP='off'
STARTMODE='auto'
USERCONTROL='no'

重新啟動網路後,看看裡頭的資訊吧!

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.22/24 brd 192.168.10.255 scope global br0
    inet6 fe80::f66d:4ff:fe7b:be13/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether ca:f4:7c:0b:34:1f brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Bridge on bonding

延續先前bonding的設定,我們把bond0設定成bridge:

ifcfg-bond0ifcfg-br0
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=6 miimon=100'
BONDING_SLAVE0='eth0'
BONDING_SLAVE1='eth1'
BOOTPROTO='static'
IPADDR='0.0.0.0/32'
STARTMODE='auto'
USERCONTROL='no'
BOOTPROTO='dhcp'
BRIDGE='yes'
BRIDGE_FORWARDDELAY='0'
BRIDGE_PORTS='bond0'
IPADDR='192.168.10.22/24'
GATEWAY=192.168.10.1
BRIDGE_STP='off'
STARTMODE='auto'
USERCONTROL='no'

當然你想設定DHCP也行!別忘了重新啟動網路吧!

service network restart

Setting up Bridge on SuSE Linux by Yast2

我說不出我對於yast有多麼的崇敬,SuSE的yast真的可以說是系統管理工具的楷模,我深信所以試圖寫出比yast更優秀工具的工程師也會覺得黔驢技窮。

在Yast2 -> Network Device裡,可以新增一個網路裝置。
選擇建立Bridge。
勾選要建立bridge的裝置。
按下OK就完成了,非常帥氣的Yast!!!

Share

(11) NIC bridging -- Redaht Linux

Bridging on Redhat Linux

Redhat Linux裡想要啟用bridge(IEEE 802.1d)功能,必須要先安裝bridge-utils套件;如果系統裡可以執行brctl這個指令,那麼你的系統已經可以建立bridge了。
假設現在要把eth0設定成bridge分享給VM作為與外部溝通的管道:

ifcfg-eth0ifcfg-br0
DEVICE=eth0
BRIDGE=br0
BOOTPROTO=static
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.22
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
USERCTL=no
NM_CONTROLLED=no

請注意這裡關於eth0只有啟用,並沒有賦予其他設定!重新啟動網路後,看看裡頭的資訊吧!

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.22/24 brd 192.168.10.255 scope global br0
    inet6 fe80::f66d:4ff:fe7b:be13/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether ca:f4:7c:0b:34:1f brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Bridge on bonding

延續先前bonding的設定,我們把bond0設定成bridge:

ifcfg-eth0ifcfg-eth1ifcfg-bond0ifcfg-br0
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=eth1
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=bond0
TYPE=bonding
BRIDGE=br0
BOOTPROTO=static
# IPADDR=192.168.10.198
# NETMASK=255.255.255.0
# GATEWAY=192.168.10.1
# MTU=5000
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="mode=6 miimon=100
HOTPLUG=no
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.22
NETMASK=255.255.255.0
GATEWAY=192.168.10.1

當然你想設定DHCP也行!別忘了重新啟動網路吧!

service network restart

參考文章:

Share

(10) NIC bridging -- Debian GNU/Linux

Bridging on Debian GNU/Linux

在Debian/Ubuntu裡想要啟用bridge(IEEE 802.1d)功能,必須要先安裝bridge-utils套件;假設你已經安裝了KVM/XEN,那麼bridge-utils則早就安裝完畢。
假設現在要把eth0設定成bridge,作為VM與外部溝通的管道:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
 address 192.168.10.198
 netmask 255.255.255.0
 gateway 192.168.10.1
 up sleep 3; ethtool -s br0 autoneg off speed 1000 duplex full 
 bridge_ports bond0
 bridge_fd 0  #forward delay=0s
 bridge_hello 2   #say hello time=2s
 bridge_maxage 12 #maximum message age
 bridge_stp on    #啟用STP

請注意這裡關於eth0的宣告只能使用manual!重新啟動網路後,看看裡頭的資訊吧!

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.198/24 brd 192.168.10.255 scope global br0
    inet6 fe80::f66d:4ff:fe7b:be13/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether ca:f4:7c:0b:34:1f brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Bridge on bonding

延續先前bonding的設定,我們把bond0設定成bridge:

auto eth0
iface eth0 inet manual
bond-master bond0

auto eth1
iface eth1 inet manual
bond-master bond0

auto bond0
iface bond0 inet manual
 # address 192.168.10.198
 # netmask 255.255.255.0
 # gateway 192.168.10.1 
 bond-slaves eth0 eth1
 bond-mode 5
 bond-miimon 100
 bond-downdelay 200
 bond-updelay 200

auto br0
iface br0 inet static
 address 192.168.10.22
 netmask 255.255.255.0
 gateway 192.168.10.1
 bridge_ports bond0
 bridge_stp off

當然你想設定DHCP也行!別忘了重新啟動網路吧!

invoke-rc.d networking restart

參考文章:

Share

(9) NIC bridging concepts

What is a bridge?


不管是鄉間優美的Richmond古橋,或是雪梨南北的重要命脈Hobour Bridge,或者是通往祖靈的彩虹橋,他們最重要的特點就是"溝通兩端的交通"。作為一個溝通管道,他不在乎上面要載運什麼樣的交通工具,也不在乎要實行何種交通規則--他就只是橋樑。

我們延續這樣的觀念:一個bridge裝置就是能連接兩個(或以上)網路的設備。這個裝置不需要非常有智慧,他只要能傳送封包就好(layer 2);他就像是一個port數有限的switch,負責作為多個網路裝置的通道;而事實上,他就是switch的前身。從現在開始把bridge在腦海中替換成switch邏輯上幾乎是安全的。

首先,switch只負責利用廣播以及ARP table來負責封包傳輸,因此bridge(就是switch)是不懂得IP位置的。假設有兩段獨立的網路想要溝通,除了買switch之外,也可以用Linux作為bridge來達成。

Bridge是IEEE 802.1d,在Linux裡是透過brtcl這個工具來控制bridge裝置,請先確定Linux系統有安裝bridge-utils這個套件。接上一張有2 ports以上的NIC,事情就便得很簡單:

brctl addbr br0 #新增一個bridge裝置
brctl addif br0 eth0 #把eth0加到br0裡
brctl addif br0 eth1 #把eth1加到br0裡
剛剛說過,eth0/eth1作為br0的兩端界面,是不需要也不可以有ip位置的。請把位置拿掉並確定裝置有起來:
ip l set eth0 up
ip a add 0.0.0.0 dev eth0
ip l set eth1 up
ip a add 0.0.0.0 dev eth1
ip l set br0 up
就是如此不可置信的容易。網路上有些中文文章寫bridge需要有ip_forwarding,這顯然是錯誤的說法;traffic都跑在Layer 2又如何懂得ip呢?
雖然eth0/eth1上不可設定位置,但是不代表br0不可以。設定br0的ip純粹只是為了與這台Linux連線,就像是你為switch設定management port的IP位置一樣。
ip a add 192.168.10.100/24 dev br0
ip r add default via 192.168.10.1 dev br0
記得在寫個DNS資訊到/etc/resolv.conf,這台switch就可以上網啦(聽起來很怪異吧!)

brctl還能幫我們作些什麼?

其實敲個brctl就可以知道還有哪些東西好玩,這裡僅列出一些些:
  • addbr <bridge> :新增一個bridge
  • brctl addbr br1
  • delbr <bridge> :刪除一個bridge
  • brctl delbr br1
  • addif <bridge> <device> :從一個bridge裡增加一個interface
  • brctl addif br0 eth2
  • delif <bridge> <device> :從一個bridge裡刪除一個interface
  • brctl delif br0 eth2
  • show [ <bridge> ] :顯示所有的bridge資訊
  • brctl show
    大概會看到這樣的訊息:
    bridge name bridge id  STP enabled interfaces
    br0  8000.f46d047bbe13 no  eth0
    virbr0  8000.000000000000 yes
  • showmacs <bridge> :顯示mac欄位
  • brctl showmacs br0
    port no mac addr  is local? ageing timer
      1 00:12:0e:39:37:48 no     0.71
      1 00:26:18:63:62:70 no     0.02
      1 40:6c:8f:02:e5:3a no     2.32
      1 f4:6d:04:7b:be:13 yes     0.00
  • showstp <bridge> :顯示Spanning Tree的狀態
  • brctl showstp
    br0
     bridge id  8000.f46d047bbe13
     designated root 8000.f46d047bbe13
     root port     0   path cost     0
     max age    12.00   bridge max age    12.00
     hello time     2.00   bridge hello time    2.00
     forward delay     9.00   bridge forward delay    9.00
     ageing time   300.01
     hello timer     0.50   tcn timer     0.00
     topology change timer    0.00   gc timer   171.86
     flags   
    
    
    eth0 (1)
     port id  8001   state       forwarding
     designated root 8000.f46d047bbe13 path cost    19
     designated bridge 8000.f46d047bbe13 message age timer    0.00
     designated port 8001   forward delay timer    0.00
     designated cost    0   hold timer     0.00
     flags
  • stp <bridge> {on|off} :啟用/停用STP
  • brctl stp br0 on

Bridge可以『只』連接一個port嗎?

答案是可以的,只是比較難以想像。假設一個bridge只連接一個裝置,那麼這個bridge的角色更像是router,而且是『分享實體網路』的功能給虛擬機器。最常見的例子就是KVM/XEN的環境了:KVM跟XEN總是會幫我們自動產生一個virbr0的裝置,這個virbr0裝置其實就是連接hypervisor以及虛擬NIC的通道,這個通道不僅能溝通虛擬機器以及實體機器,他還兼有DHCP+NAT的功能,因此我們的Linux bridge瞬間變成了router。但是如果要讓虛擬機器跟實體機器處於同一網段,我們則必須手動再建立一個bridge,讓實體的eth0與虛擬的NIC建立起通道:
brctl addbr br0
brctl addif br0 eth0
dhclient br0
此時你的bridge的角色是router,他必須持有一個ip才能夠把虛擬機器的封包往外繞送。有了這些基本觀念,就不會覺得為什麼有些人要在bridge上設定IP,有些則不用。唯有了解這個裝置真正的角色,我們的設定才具有意義。
網路上關於bridge的參考文章不少,但截至目前為止有用的只有這篇;精讀了這篇其餘的時間就省下來了:

Share

(8) NIC bonding -- SuSE Linux

就suse的設定而言,預設會是以傳統Network來管理網路設定。本文專注在使用手動設定TCP/IP網路設定。

Bonding on SLES/OpenSuSE

本文預設使用mode=6(也可以寫作mode=balance-alb)來作為範例,請先記得備份:

cp /etc/sysconfig/network/ifcfg-eth{0,1} ~/Desktop
就可以開始進行bonding實驗。
  1. 安裝必要的套件
  2. zypper in iputils
    iputils套件包含了重要的ifenslave指令,他是RHEL預設就會安裝的套件。
  3. 修改/etc/modprobe.d/aliases.conf
  4. 很高興的,在SuSE我們不需要對這個檔案作設定!
  5. 修改/etc/sysconfig/network/ifcfg-*:
  6. 假設你要bond eth0, eth1兩張NIC到192.168.10.198/24,
    ifcfg-eth0ifcfg-eth1ifcfg-bond0
    BOOTPROTO='none'
    STARTMODE='auto'
    USERCONTROL='no'
    BOOTPROTO='none'
    STARTMODE='auto'
    USERCONTROL='no'
    BONDING_MASTER='yes'
    BONDING_MODULE_OPTS='mode=6 miimon=100'
    BONDING_SLAVE0='eth0'
    BONDING_SLAVE1='eth1'
    BOOTPROTO='static'
    IPADDR='192.168.100.2/24'
    STARTMODE='auto'
    USERCONTROL='no'
    
  7. 重新啟動網路服務:
  8. rcnetwork restart
    如果沒有錯誤訊息的話,使用ip a指令來查看一切是否設定正確:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
        inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
        link/ether 84:34:97:11:00:d8 brd ff:ff:ff:ff:ff:ff
    3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
        link/ether 84:34:97:11:00:d9 brd ff:ff:ff:ff:ff:ff
    4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
        link/ether 84:34:97:11:00:d8 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.198/24 brd 192.168.10.255 scope global bond0
        inet6 fe80::5054:ff:fedf:5523/64 scope link 
           valid_lft forever preferred_lft forever
    我們可以發現此時bond0的MAC位置跟eth0相同,原因是現在Mode6(balance-alb)主要的slave是eth0。可以查看bonding狀態來求證:
    cat /proc/net/bonding/bond0
    看起來會是這個樣子:
    Bonding Mode: adaptive load balancing
    Primary Slave: None
    Currently Active Slave: eth0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0

當然你也可以把bonding設定為dhcp!很簡單吧!

Bonding on SLES/OpenSuSE by Yast2

Yast是令我充滿敬佩的系統管理套件,他讓每件事情都如此簡單快速--做bonding就是一個很好的例子:在我們還自思考bonding該下哪些參數時,yast早就幫我們準備好了!

在Yast2 -> Network Device裡,可以新增一個網路裝置。
選擇一個Bond裝置。
給定一個IP或是DHCP。請注意在這之前我就已經先把eth0/eth1設定成No Links and IP Setup(Bonding Slaves)。在eth0/eth1還有ip的情況下,是無法將裝置納入bond0的。
選定兩個slaves之後,還可以設定bonding的一些參數。
按下OK,神奇的就設定完成了!

參考文件:
(問)有了Yast,你還需要參考文件嗎?

Share

(7) NIC bonding -- Redhat Linux

就Redhat的設定而言,如果安裝了X window則預設會是以Network Manager來管理網路設定。本文專注在使用手動設定TCP/IP網路設定。

Bonding on RHEL/Fedora

本文預設使用mode=6(也可以寫作mode=balance-alb)來作為範例,請先記得備份:
cp /etc/sysconfig/network-scripts/ifcfg-eth{0,1} ~/Desktop
就可以開始進行bonding實驗。
  1. 安裝必要的套件
  2. yum install iputils
    iputils套件包含了重要的ifenslave指令,他是RHEL預設就會安裝的套件。
  3. 修改/etc/modprobe.d/aliases.conf
  4. 新增一行alias:
    alias bond0 bonding
    (備註) 在一些比較早期的版本裡可能需要寫在/etc/modprobe.conf。
  5. 關閉NetworkManager並啟動bonding:
  6. 相信在先前的章節你已經關閉了NetworkManager了...但是還是提醒一下就是了。
    service NetworkManager stop
    chkconfig NetworkManager off
    modprobe bond0
  7. 修改/etc/sysconfig/network-scripts/ifcfg-*:
  8. 假設你要bond eth0, eth1兩張NIC到192.168.10.198/24,
    ifcfg-eth0ifcfg-eth1ifcfg-bond0
    DEVICE=eth0
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    USERCTL=no
    DEVICE=eth1
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    USERCTL=no
    DEVICE=bond0
    TYPE=bonding
    BOOTPROTO=static
    IPADDR=192.168.10.198
    NETMASK=255.255.255.0
    GATEWAY=192.168.10.1
    ONBOOT=yes
    USERCTL=no
    NM_CONTROLLED=no
    BONDING_OPTS="mode=6 miimon=100 updelay=200 downdelay=200"
  9. 重新啟動網路服務:
  10. service network restart
    如果沒有錯誤訊息的話,使用ip a指令來查看一切是否設定正確:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
        link/ether 84:34:97:11:00:d8 brd ff:ff:ff:ff:ff:ff
    3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
        link/ether 84:34:97:11:00:d9 brd ff:ff:ff:ff:ff:ff
    4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
        link/ether 84:34:97:11:00:d8 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.198/24 brd 192.168.10.255 scope global bond0
        inet6 fe80::8634:97ff:fe11:d8/64 scope link 
           valid_lft forever preferred_lft forever
    我們可以發現此時bond0的MAC位置跟eth0相同,原因是現在Mode6(balance-alb)主要的slave是eth0。可以查看bonding狀態來求證:
    cat /proc/net/bonding/bond0
    看起來會是這個樣子:
    Bonding Mode: adaptive load balancing
    Primary Slave: None
    Currently Active Slave: eth0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0

當然你也可以把bonding設定為dhcp!很簡單吧!

參考文章:

Share

(6) NIC bonding -- Debain GNU/Linux

Bonding on Debian

就Debian的設定而言,如果安裝了X window則預設會是以Network Manager來管理網路設定。本文專注在使用手動設定TCP/IP網路設定。

Bonding on Debian/Ubuntu

本文預設使用mode=6(也可以寫作mode=balance-alb)來作為範例,假設你要bond eth0, eth1兩張NIC到192.168.10.198/24:
  1. 安裝bonding介面卡管理程式:ifenslave
  2. aptitude install ifenslave-2.6 chkconfig -y
    ifenslave是製作bonding所必須的工具,因此務必確定他有被正確的安裝。
  3. 修改/etc/modprobe.d/aliases.conf
  4. 新增一行alias:
    alias bond0 bonding
    (備註) 在一些比較早期的版本裡可能需要寫在/etc/modprobe.conf。
  5. 關閉network-manager並啟動bonding:
  6. 相信在先前的章節你已經關閉了network-manager了...但是還是提醒一下就是了。有些人認為要刪除network-manager比較心安,就看個人意見了。
    service network-manager stop
    chkconfig network-manager off #aptitude remove network-manager
    modprobe bond0
  7. 修改/etc/network/interfaces:
  8. # The loopback network interface
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet manual
    bond-master bond0
    
    auto eth1
    iface eth1 inet manual
    bond-master bond0
    
    auto bond0
    iface bond0 inet static
     address 192.168.10.198
     netmask 255.255.255.0
     bond-slaves     eth0 eth1
     bond-mode       6
     bond-miimon     100
     bond-downdelay  200
     bond-updelay    200
    
    需注意此時在interfaces裡的eth0/eth1兩個bonding的slave都必須設定為manual並註明master是bond0。另外如果是早期的Ubuntu/Debian,其bond的設定可能如下:
    pre-up ifenslave bond0 eth0 eth1
    post-down ifenslave -d bond0 eth0 eth1

    這幾行設定在Ubuntu/Debian也適用,詳細考古文章可以參考Ubuntu Bonding合併網卡-Debian and ubuntu with a 2.6 kernel
  9. 重新啟動網路服務:
  10. /etc/init.d/networking restart
    如果沒有錯誤訊息的話,使用ip a指令來查看一切是否設定正確:
    maxsolar@Ubuntu1204-amd64:~$ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
        link/ether 84:34:97:11:00:d8 brd ff:ff:ff:ff:ff:ff
    3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
        link/ether 84:34:97:11:00:d9 brd ff:ff:ff:ff:ff:ff
    4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
        link/ether 84:34:97:11:00:d8 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.198/24 brd 192.168.10.255 scope global bond0
        inet6 fe80::8634:97ff:fe11:d8/64 scope link 
           valid_lft forever preferred_lft forever
    我們可以發現此時bond0的MAC位置跟eth0相同,原因是現在Mode6(balance-alb)主要的slave是eth0。可以查看bonding狀態來求證:
    cat /proc/net/bonding/bond0
    看起來會是這個樣子:
    Bonding Mode: adaptive load balancing
    Primary Slave: None
    Currently Active Slave: eth0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
    

當然你也可以把bonding設定為dhcp!很簡單吧!但是請記得bonding的裝置只能是實體裝置(不能是br0+br1或是bond0+bond1),也只能是同類型的網路界面(不能是eth0+wlan0)。

參考文章:

Share

(5) NIC Bonding Concepts

Intro of NIC bonding

  • NIC bonding就是把兩個(或以上)的ports組合成同一個IP,與上面的IP aliasing剛好相反。在Windows的世界常聽見的是teaming,而在Cisco的世界比較常見trunking這個說法。幸運的是只要你安裝的是本世紀才發行的Linux,kernel都會包含bonding的核心模組,你唯一需要注意的是系統裡是否有ifenslave這隻工具,在使用bonding前系統必須擁有他才能成功bond。
  • NIC bonding所期望達成的目標就是頻寬合併(Aggregation),根據不同模式分別提供不同的狀態:負載平衡(load balance)、即時備援(hot redundancy),以及一個簡單監控bonding狀態的工具。
  • 觀念上,每張NIC在bonding之後都稱之為slave,組合後的bond為master;對核心來說參與封包傳送的裝置不再是eth0,而是bond0;不過底層的運作還是由ethx處理,bond0其實只是個虛擬裝置,因此如果透過wireshark擷取封包,是無法成功擷取"bond0"的封包的。
  • (附註:參與bonding的ports可以來自不同NIC,因為底層的工作實際上還是由各自的driver負責;如果你遇到bonding上的問題,建議先使用多ports的NIC比較好釐清問題所在。)
  • NIC bonding共有七種模式,有些使用標準的IEEE 802.3,也採用IEEE的802.3ad/802.1ax的標準,也就是Link Aggregation Control Protocol(LACP)。Linux底下的NIC bonding實作在Layer 2(Data-Link Layer),根據Linux Ethernet Bonding Driver HOWTO的說明,NIC bonding的七種模式如下:
  • ModeNameInterpretationLoad BalancingFault Tolerance
    0Round-Robin
    (balance-rr)
    所有參與bonding的NIC輪流擔任封包的傳送(沒有Active Slave的觀念),但同一時間只有一張NIC真正有作用。普通switch即可啟用YESYES
    1Active-Backup
    (active-backup)
    參與bonding的NIC只有一張有作用(Active Slave),其餘都處於備援狀態;當其中一張NIC失效後,另一張網卡(slave)才會取而代之。普通switch即可啟用NOYES
    2XOR
    (balance-xor)
    XOR算是mode0的進化版:當主機進行多個連線時,同一個NIC會負責同一個來源位置--也就是盡可能讓同一張NIC負責同一個位置越久越好。普通switch即可啟用YESYES
    3Broadcast
    (broadcast)
    封包以廣播的方式丟給所有的NIC,所有的NIC也同時接收/傳送所有封包。這個mode擁有最快速的的fault tolerance。普通switch即可啟用NOYES
    4IEEE 802.3ad Dynamic Link Aggregation (802.3ad)使用這個業界標準的模式擁有真正的outgoing/incoming balancing,只是不僅NIC driver需要支援ethtool設定,還需要支援802.3ad/802.1ax的switch才行。YESYES
    5Adaptive Transmit Load Balancing (balance-tlb)這個模式只有outgoing traffic擁有load balancing,incoming只有其中一張NIC負責。當負責incoming的那張NIC失效時,另一個slave才會負責incoming traffice。此模式常用於file/mail server。雖然普通switch即可使用,但是driver必須支援ethtool設定才行NOYES
    6Adaptive Load Balancing
    (balance-alb)
    利用ARP協商達成每張NIC的incoming balancing--即outcoming balance+incoming balancing。只要普通的switch就能達此要求。也是大部分中小企業主機所選擇的模式。不過driver除了需要支援ethtool之外,還必須能動態改變MAC位置才行。YESYES
  • 無論你用哪一套Linux,都無法使用bonding在Network Manager上。在Redhat裡,可以定義NM_CONTROLLER=no而不需真的關閉NetworkManager,但是在Debian/SuSE你必須老實的關閉Network Manager,畢竟server的網路環境哪需要用到Network Manager呢?

以下幾個重要的options,參考自Linux Ethernet Bonding Driver HOWTO

Bonding OptionsExpression
miimonMII的監控頻率(以millisecond為單位)。當其中一張NIC失效時,MII能多快發現並把工作交給下一張NIC。HOW-TO的建議值為100,預設值為0。
arp_intervalARP的監控頻率(以millisecond為單位)。功能相當於miimon,HOW-TO的建議值為100,預設值為0。設定此變數還必須設定arp_ip_target。
arp_ip_target指定ARP要監控的IP。此值必須在有指定arp_interval且該值>0才有意義。這個變數會以arp_interval指定的頻率發出請求至指定的位置以決定連線狀態是否正常。多個ip以,作分隔。
mode就是上表。指定mode可以寫數字或是簡稱,例如mode=4等同於mode=802.3ad。未指定時預設值為0(balance-rr)
downdelayMII監控下,從發現異常到關閉所需的時間(以millisecond為單位)。
updelayMII監控下,從發現恢復正常到啟用所需的時間(以millisecond為單位)。
lacp_rate僅適用於mode=4,定義了群組發送LACPDU的時間。slow/0代表30秒發送一次(預設值),fast/1則會每秒發送一次。例如lacp_rate=fast。
你至少需要指定miimon或是arp_interval+arp_ip_target這兩個options才能正常啟動bonding!!!

藉由觀察/proc/net/bonding/bond0來得知bonding狀態:

  1. Mode 0(balance-rr)
  2. Bonding Mode: load balancing (round-robin)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
  3. Mode 1(active-backup)
  4. Bonding Mode: fault-tolerance (active-backup)
    Primary Slave: None
    Currently Active Slave: eth1
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
  5. Mode 2(balance-xor)
  6. Bonding Mode: load balancing (xor)
    Transmit Hash Policy: layer2 (0)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
  7. Mode 3(broadcast)
  8. Bonding Mode: fault-tolerance (broadcast)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
  9. Mode 4(802.3ad)
  10. Bonding Mode: IEEE 802.3ad Dynamic link aggregation
    Transmit Hash Policy: layer2 (0)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    802.3ad info
    LACP rate: slow
    Min links: 0
    Aggregator selection policy (ad_select): stable
    Active Aggregator Info:
     Aggregator ID: 2
     Number of ports: 1
     Actor Key: 17
     Partner Key: 1
     Partner Mac Address: 00:00:00:00:00:00
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Aggregator ID: 1
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Aggregator ID: 2
    Slave queue ID: 0
  11. Mode 5(balance-tlb)
  12. Bonding Mode: transmit load balancing
    Primary Slave: None
    Currently Active Slave: eth1
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
  13. Mode 6(balance-alb)
  14. Bonding Mode: adaptive load balancing
    Primary Slave: None
    Currently Active Slave: eth0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 200
    Down Delay (ms): 200
    
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d8
    Slave queue ID: 0
    
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 84:34:97:11:00:d9
    Slave queue ID: 0
    

Share

(3) SuSE Linux Network Setting

大部分的Linux distributions都會設計兩種設定網路方式:Network Manager的動態設定以及手動設定。傳統的network服務在SuSE系列的作業系統是預設,但是由於Yast的功能非常強大,使用者透過Yast無論使用的是Network Manager還是傳統的Network服務,經驗上都沒有太大的差別。本文所提供的網路設定則專為簡單紀錄TCP/IP網路設定。

了解Linux network devices的命名方式

使用ip指令來觀察我們的網路裝置:
maxsolar@SLES11:~> ip a
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:66:c5:b9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.23/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::5054:ff:fe66:c5b9/64 scope link 
       valid_lft forever preferred_lft forever
可能看到的裝置會有:
  • lo
  • 一個loopback device。這個裝置永遠存在,即使系統沒有安裝任何的NIC。他是一個虛擬裝置,可供其他應用程式再沒有實體裝置時仍能運作。例如沒有NIC的時候,loopback裝置會自動拿127的網段當作本機位置。同樣的道理在檔案系統也是如此;掛載一個image到某個目錄下使用,這個image本身只是檔案系統裡的一個檔案,並不是實體裝置;利用loopback來他模擬成一個裝置並加以使用,就是loopback device的功能。
  • eth0
  • 一個ethernet device,精確來說只是一個interface,由0起算;因此一個4ports的網卡會有eth{0,3}這幾個裝置。
  • sit0
  • 一個將ipv4封包封裝成ipv6的裝置,通常使用於ipv4/ipv6混合的網路環境。
  • ath0
  • 無線網路的裝置。
  • tr0
  • 一個IBM的token ring環境的device。
  • fddi0
  • 一個Fibre distributed data interface裝置,常用光纖骨幹的玩家一定不陌生。
  • ppp0
  • 一個Point-to-Point的連線裝置,例如家裡撥接上網或是使用vpn時會使用。
以eth0的訊息而言,link/ether顯示的是layer2(data-link layer)的資訊,也就是MAC address;inet/inet6分別表示ipv4/ipv6的位置。

SuSE重要的網路設定檔

  • /etc/sysconfig/network/ifcfg-ethX
  • 標準的ethernet設定檔。
  • /etc/sysconfig/network/route
  • routing table。
  • /etc/resolv.conf
  • 所有unix-like系統的DNS設定--沒有他雖然可以連上internet但就沒有名稱解析可用了。
  • /etc/HOSTNAME
  • 儲存local主機名稱的檔案。
  • /etc/sysconfig/network/config
  • SuSE Linux的global網路設定檔。
  • /etc/sysconfig/network/dhcp
  • SuSE Linux的DHCP client設定檔。

DHCP v.s static IP

  • /etc/sysconfig/network/ifcfg-ethX
  • 一個設定dhcp最精簡的eth0範例如下:
    BOOTPROTO="dhcp"
    STARTMODE="auto"
    
    夠簡單吧!
    設定檔有幾個潛規則:1.變數(左側)一定要大寫,設定值(右側)以小寫為主。2.沒有先後順序的關係。

    一個設定固定ip最精簡的設定檔如下:
    BOOTPROTO='static'
    STARTMODE='auto'
    IPADDR='192.168.1.23/24'
    GATEWAY='192.168.1.1'
    USERCONTROL='no'
    
    SuSE允許非常簡便的CIDR表示法,不需要像Redhat需要定義NETMASK。更複雜一點的範例如下:
    BOOTPROTO='static' #BOOTPROTO只有staticdhcp兩種。
    STARTMODE='onboot'
    IPADDR='192.168.1.23/24' 
    ETHTOOL_OPTIONS='autoneg off speed 1000 duplex full' 
    NAME='Ethernet_01'
    REMOTE_IPADDR=''
    USERCONTROL='no'
    其中有些重要的設定值需要了解:
    1. onboot
    2. onboot表示開機時會自動啟動,相當於Redhat的ONBOOT=yes。可用的args還有auto(onboot), manual(ifup/ifdown)以及ifplugd。
    3. /24
    4. 方便的CIDR表示法。
    5. ETHTOOL_OPTIONS
    6. 此時指停用自動速度協商,並設定速度為1000Mbp/s全雙工。
    7. NAME
    8. 在yast裡顯示的名稱。
    9. REMOTE_IPADDR
    10. 這個option只有在p2p的環境才需要設定。
    11. USERCONTROL
    12. 這個option只有在cineternet/qinternet才會用到。
    如果想參考更詳盡的設定,完全不必上網google或是查man pages;/etc/sysconfig/network/ifcfg.template就提供了非常詳盡的設定說明!
  • /etc/sysconfig/network/config
  • 這個檔案內容大概像:
    DEFAULT_BROADCAST="+"
    GLOBAL_POST_UP_EXEC="yes"
    GLOBAL_PRE_DOWN_EXEC="yes"
    CHECK_DUPLICATE_IP="no"
    SEND_GRATUITOUS_ARP="no"
    DEBUG="no"
    USE_SYSLOG="yes"
    CONNECTION_SHOW_WHEN_IFSTATUS="no"
    CONNECTION_CHECK_BEFORE_IFDOWN="no"
    CONNECTION_CLOSE_BEFORE_IFDOWN="no"
    CONNECTION_UMOUNT_NFS_BEFORE_IFDOWN="no"
    WAIT_FOR_INTERFACES="30"
    LINK_READY_WAIT="0"
    IPV6_DAD_WAIT=""
    FIREWALL="yes"
    LINKLOCAL_INTERFACES="eth*[0-9]|tr*[0-9]|wlan[0-9]|ath[0-9]"
    IFPLUGD_OPTIONS="-f -I -b"
    NETWORKMANAGER="no"
    NM_ONLINE_TIMEOUT="30"
    NETCONFIG_MODULES_ORDER="dns-resolver dns-bind dns-dnsmasq nis ntp-runtime"
    NETCONFIG_DNS_POLICY="auto"
    NETCONFIG_DNS_FORWARDER="resolver"
    NETCONFIG_DNS_FORWARDER_FALLBACK="yes"
    NETCONFIG_DNS_STATIC_SERVERS="192.168.1.254 168.95.192.1"
    NETCONFIG_DNS_RANKING="auto"
    NETCONFIG_NTP_POLICY="auto"
    WIRELESS_REGULATORY_DOMAIN=''
    
  • /etc/sysconfig/network/route
  • 這個檔案內容大概像:
    172.16.100.0/16 192.168.1.1 - eth0
    default 192.168.1.254 - -
    實際上這個檔案共有五個欄位:1.destination 2.gateway 3. netmask of dest. 4. name of interface 5. type of route(optional)
    舉例來說,要通往172.16.100.0/255.255.0.0這個網段要透過192.168.1.1這個窗口,其界面名稱是eth0,則應該表示為
    172.16.100.0 192.168.1.1 255.255.0.0 eth0
    不過這樣寫真的不容易馬上理解,應該使用CIDR的寫法:
    172.16.100.0/16 192.168.1.1 - eth0
    由於第四個欄位已經一起跟第一個欄位定了,因此使用-表示省略他。第二行的default表示如果上述的routing table都找不到路徑傳送的話,則所有封包都往default gateway送。需注意這個檔案內容具有順序性--default gateway必須擺在最後一行

重新啟動網路服務使設定生效

SLES預設都是使用Network服務,如果您不確定系統使用的是不是Network服務,可以這樣檢查:
SLES11:/home/maxsolar # rcnetwork status
Checking optional network interfaces:
    eth0      
    eth0      IP address: 192.168.1.23/24
    eth0      is up                                                  running
Checking mandatory network interfaces:
    lo        
    lo        IP address: 127.0.0.1/8
    secondary lo IP address: 127.0.0.2/8
    lo        is up                                                  running
Checking service network .  .  .  .  .  .  .  .  .  .  .             running
由於我們是使用手動方式設定ip,因此別忘了名稱解析也是很重要的!假設我們的DNS server是192.168.1.254,那麼在自家的/etc/resolv.conf應該要有紅色這行:
search wistron.com
nameserver 192.168.1.254
nameserver 168.95.192.1
nameserver最多定義兩行,再多的設定也只會讀前兩行而已。

IP Aliasing

IP aliasing是把多個IP關聯到同一張網卡的一種技術。一般的使用狀態下,一張網卡只需要一組IP位置,但是有許多時候我們為了安全性/管理方便,會希望一張網卡能有一個以上的IP,因此會使用IP aliasing。
假設主機原本的IP為192.168.1.23/24,想要再額外指定一個IP為192.168.1.125/24,只複製/etc/sysconfig/network/ifcfg-eth0為ifcfg-eth0:1並修改ifcfg-eth0:1為自己要alias的IP即可。
原本的ifcfg-eth0大致如下:
BOOTPROTO='static'
STARTMODE='static'
IPADDR='192.168.1.23/24'
USERCONTROL='no'
修改過的ifcfg-eth0:1如下
BOOTPROTO='static'
IPADDR='192.168.1.23/24'
STARTMODE='auto'
USERCONTROL='no'
IPADDR1='192.168.150.125/24'
需注意eth0:1必須跟eth0同網段,且無法使用DHCP來取得IP位置。

Share

(2) Redhat Linux Network Setting

大部分的Linux distributions都會設計兩種設定網路方式:Network Manager的動態設定以及手動設定。Network Manager在Redhat系列的作業系統是預設,如果使用者只是為了設定最基本的網路設定,那麼使用圖形界面的Network Manager就可以了,laptops的環境因為位置可能經常變動,使用Network Manager是最方便的方法。然而進階的網路設定反而撰寫設定檔更為一目了然,本文的目的便是簡單紀錄TCP/IP網路設定。

了解Linux network devices的命名方式

使用ip指令來觀察我們的網路裝置:
[maxsolar@RHEL58 ~]$ ip a
1: lo:  mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 52:54:00:56:15:f3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.12/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::5054:ff:fe56:15f3/64 scope link 
       valid_lft forever preferred_lft forever
3: sit0:  mtu 1480 qdisc noop 
    link/sit 0.0.0.0 brd 0.0.0.0
可能看到的裝置會有:
  • lo
  • 一個loopback device。這個裝置永遠存在,即使系統沒有安裝任何的NIC。他是一個虛擬裝置,可供其他應用程式再沒有實體裝置時仍能運作。例如沒有NIC的時候,loopback裝置會自動拿127的網段當作本機位置。同樣的道理在檔案系統也是如此;掛載一個image到某個目錄下使用,這個image本身只是檔案系統裡的一個檔案,並不是實體裝置;利用loopback來他模擬成一個裝置並加以使用,就是loopback device的功能。
  • eth0
  • 一個ethernet device,精確來說只是一個interface,由0起算;因此一個4ports的網卡會有eth{0,3}這幾個裝置。
  • sit0
  • 一個將ipv4封包封裝成ipv6的裝置,通常使用於ipv4/ipv6混合的網路環境。
  • wlan0
  • 無線網路的裝置。
  • tr0
  • 一個IBM的token ring環境的device。
  • fddi0
  • 一個Fibre distributed data interface裝置,常用光纖骨幹的玩家一定不陌生。
  • ppp0
  • 一個Point-to-Point的連線裝置,例如家裡撥接上網或是使用vpn時會使用。
以eth0的訊息而言,link/ether顯示的是layer2(data-link layer)的資訊,也就是MAC address;inet/inet6分別表示ipv4/ipv6的位置。

Redhat重要的網路設定檔

  • /etc/sysconfig/network-scripts/ifcfg-ethX
  • 標準的ethernet設定檔。
  • /etc/sysconfig/network-scripts/route-ethX
  • ethX的routing table。
  • /etc/resolv.conf
  • 所有unix-like系統的DNS設定--沒有他雖然可以連上internet但就沒有名稱解析可用了。
  • /etc/sysconfig/network
  • Redhat Linux的global網路設定檔。
  • /etc/sysconfig/networking/
  • 放置Network Manager的設定檔的目錄。

DHCP v.s static IP

  • /etc/sysconfig/network-scripts/ifcfg-ethX
  • 一個設定dhcp最精簡的eth0範例如下:
    DEVICE="eth0"
    BOOTPROTO="dhcp"
    HWADDR="52:54:00:92:34:4C"
    ONBOOT="yes"
    
    設定檔有幾個潛規則:1.變數(左側)一定要大寫,設定值(右側)以小寫為主。2.沒有先後順序的關係。

    其實MAC address的欄位也是可以省略不寫的。如果要使Network Manager忽略偵測並自動設定這個裝置,則應該要多加入NM_CONTROLLED=no這個欄位。
    一個設定固定ip且不使用Network Manager的設定檔如下:
    DEVICE="eth0"
    BOOTPROTO="none"
    IPADDR=192.168.1.13
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.254
    HWADDR="52:54:00:92:34:4C"
    NM_CONTROLLED="no"
    ONBOOT="yes"
    TYPE="Ethernet"
    ETHTOOL_OPTS="autoneg off speed 1000 duplex full"
    UUID="859633bb-0019-4fbb-8ab1-74b9ac90b33c"
    
    設定static ip時,BOOTPROTO設定為none或是static是相同的效果。ONBOOT則宣告開機時期是否要自動啟用這個裝置。HWADDR則可使用MAC address作為該裝置的唯一辨識,多張網卡或是多阜網卡的時候要固定住裝置代號非常好用。
    ETHTOOL_OPTS則能直接設定ethtool的參數,本例則是停用自動速度協商,並設定速度為1000Mbp/s全雙工。
  • /etc/sysconfig/network
  • 這個檔案內容大概像:
    NETWORKING=yes     #啟用ipv4
    NETWORKING_IPV6=yes     #啟用ipv6
    HOSTNAME=RHEL58     #主機名稱定義
    GATEWAY=192.168.1.254   #default gateway
    
  • /etc/sysconfig/network-scripts/route-eth0
  • 這個檔案提供了eth0的靜態路由。舉例來說,要通往172.16.100.0/255.255.0.0這個網段要透過192.168.1.1這個窗口;通往192.168.10.0/24這個網段要透過192.168.10.1這個窗口,則應該表示為:
    ADDRESS0=172.16.100.0
    NETMASK0=255.255.0.0
    GATEWAY0=192.168.1.1
    ADDRESS1=192.168.10.0
    NETMASK1=255.255.255.0
    GATEWAY1=192.168.1.10
    

重新啟動網路服務使設定生效

如果使用Network Manager,很抱歉剛剛所修改的設定都不會成功。因此我們先查看系統使用的是Network Manager或是傳統的network服務:
[maxsolar@RHEL58 sysconfig]$ service NetworkManager status
NetworkManager is stopped
[maxsolar@RHEL58 sysconfig]$ service network status
Configured devices:
lo eth0 sit0
Currently active devices:
lo eth0 sit0
結果可知我目前的網路是交由network服務來管理,因此可以藉由重新啟動network服務:
service network restart
或是用ifdown eth0再ifup eth0來使設定生效:
ifdown eth0 && ifup eth0
如果發現系統使用Network Manager來管理,我的建議使將之停用:
service NetworkManager stop
chkconfig NetworkManager off
chkconfig network on
service network restart
由於我們是使用手動方式設定ip,因此別忘了名稱解析也是很重要的!假設我們的DNS server是192.168.1.254,那麼在自家的/etc/resolv.conf應該要有紅色這行:
search wistron.com
nameserver 192.168.1.254
nameserver 168.95.192.1
nameserver最多定義兩行,再多的設定也只會讀前兩行而已。

IP Aliasing

IP aliasing是把多個IP關聯到同一張網卡的一種技術。一般的使用狀態下,一張網卡只需要一組IP位置,但是有許多時候我們為了安全性/管理方便,會希望一張網卡能有一個以上的IP,因此會使用IP aliasing。
假設主機原本的IP為192.168.1.124/24,想要再額外指定一個IP為192.168.1.125/24,只複製/etc/sysconfig/network-scripts/ifcfg-eth0為ifcfg-eth0:1並修改ifcfg-eth0:1為自己要alias的IP即可。
原本的ifcfg-eth0大致如下:
DEVICE="eth0"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT="yes"
IPADDR=192.168.1.124
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
修改過的ifcfg-eth0:1如下
DEVICE="eth0:1"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT="yes"
IPADDR=192.168.1.125
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
除了IP位置以及裝置名稱有變動之外,其餘均保持不變。儲存後,重新啟動你的網路:
service network restart
其中的NM_CONTROLLED變數即是決定是否交由NetworkManager來控制,由於我們已經關閉NM,這個項目僅明確表示不使用NM。Fedora使用者需注意:較新版本的Fedora一旦開啟NM,所有設定都不會寫進設定檔裡,即使寫了設定檔也是無效的,因此強烈建議啟用ip aliasing之前先關閉NM。如果想要新增更多個IP是可行的,只要複製ifcfg-eth0為範本並以:附加數字即可。
有幾點需要特別提醒:
1.eth0:1可以跟eth0必須在相同網段,但是在有VLAN時例外。
2.eth0:1無法使用dhcp。
3.如果想要使用一段網路範圍作為alias裝置,則需要手動新增一個檔案/etc/sysconfig/network-scripts/ifcfg-eth0-range0,然後內容如下:
DEVICE=eth0
IPADDR_START=192.168.1.11
IPADDR_END=192.168.1.50
NETMASK=255.255.255.0
CLONENUM_START=11
如此一來network服務便會幫我們產生從11~50的alias裝置,然後裝置代號從eth0:11開始起跳。

Share

(1) Debian/GNU Network Setting

(1) Debian/GNU Network Setting

大部分的Linux distributions都會設計兩種設定網路方式:Network Manager的動態設定以及傳統的Network設定。就Debian的設定而言,如果安裝了X window則預設會是以Network Manager來管理網路設定。本文專注在使用手動設定TCP/IP網路設定。

了解Linux network devices的命名方式

使用ip指令來觀察我們的網路裝置:
maxsolar@Debian6:~$ ip a
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether f4:6d:04:7b:be:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::f66d:4ff:fe7b:be13/64 scope link 
       valid_lft forever preferred_lft forever
可能看到的裝置會有:
  • lo
  • 一個loopback device。這個裝置永遠存在,即使系統沒有安裝任何的NIC。他是一個虛擬裝置,可供其他應用程式再沒有實體裝置時仍能運作。例如沒有NIC的時候,loopback裝置會自動拿127的網段當作本機位置。同樣的道理在檔案系統也是如此;掛載一個image到某個目錄下使用,這個image本身只是檔案系統裡的一個檔案,並不是實體裝置;利用loopback來他模擬成一個裝置並加以使用,就是loopback device的功能。
  • eth0
  • 一個ethernet device,精確來說只是一個interface,由0起算;因此一個4ports的網卡會有eth{0,3}這幾個裝置。
  • sit0
  • 一個將ipv4封包封裝成ipv6的裝置,通常使用於ipv4/ipv6混合的網路環境。
  • wlan0
  • 無線網路的裝置。
  • tr0
  • 一個IBM的token ring環境的device。
  • fddi0
  • 一個Fibre distributed data interface裝置,常用光纖骨幹的玩家一定不陌生。
  • ppp0
  • 一個Point-to-Point的連線裝置,例如家裡撥接上網或是使用vpn時會使用。
以eth0的訊息而言,link/ether顯示的是layer2(data-link layer)的資訊,也就是MAC address;inet/inet6分別表示ipv4/ipv6的位置。

Debian重要的網路設定檔

  • /etc/network/interfaces
  • 標準的ethernet設定檔。
  • /etc/resolv.conf
  • 所有unix-like系統的DNS設定--沒有他雖然可以連上internet但就沒有名稱解析可用了。
  • /etc/hostname
  • 儲存local主機名稱的檔案。

DHCP v.s static IP

  • /etc/network/interfaces
  • 一個設定dhcp最精簡的eth0範例如下:
    auto lo
    iface lo inet loopback
               
    auto eth0
    iface eth0 inet dhcp
    夠簡單吧!
    設定檔有幾個潛規則:1.變數(左側)與設定值(右側)必須是小寫。2.沒有先後順序的關係。

    一個設定固定ip最精簡的設定檔如下:
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
     address 192.168.1.5
     netmask 255.255.255.0
     gateway 192.168.1.254
    Debian不允許CIDR表示法,必須使用netmask表示遮罩。更複雜一點的範例如下:
    auto eth0
    iface eth0 inet static
    allow-hotplug eth0
     address 192.168.1.5
     netmask 255.255.255.0
     gateway 192.168.1.254
     network 192.168.1.0
     broadcast 192.168.1.255
     dns-search hello.org
     dns-nameservers 192.168.1.254 168.95.192.1
     up sleep 3; ethtool -s eth0 autoneg off speed 1000 duplex full
    Debian允許各個不同的應用程式使用不同的nameserver。假設情況單純,通常一個nameserver設定檔就夠了(/etc/resolv.conf),但是假設不同介面需要使用不同的名稱解析,單靠修改/etc/resolv.conf則會相當辛苦;因此有了resolvconf這隻程式--不再單純依靠/etc/resolv.conf,可以讓不同介面使用不同的名稱解析,也就是dns-nameserver這個參數。
    在interfaces裡直接寫入command名稱是很直覺的一件事情,這裡設定啟動之後等待3秒後在啟用ethtool,當然也支援mii-tool,但是需注意有些driver並不支援ethtool或是mii-tool,建議在設定之前先直接在終端機上試試看,再寫入到設定檔裡。

重新啟動網路服務使設定生效

Debian如果有安裝X的話,預設是啟動network-manager的。請把他關閉讓我們後續的實驗繼續進行:
aptitude install chkconfig
chkconfig network-manager off
chkconfig networking on
service network-manager stop
invoke-rc.d networking restart
重新啟動網路後可以發現/etc/resolv.conf應該要有紅色這幾行:
search wistron.com
nameserver 192.168.1.254
nameserver 168.95.192.1
nameserver最多定義兩行,再多的設定也只會讀前兩行而已。
請注意這個檔案你不需要手動設定,會自動透過networking或是network-manager設定。 /etc/hostname則是儲存主機名稱的地方,需注意這個檔案與/etc/hosts的意義是不同的。

IP Aliasing

IP aliasing是把多個IP關聯到同一張網卡的一種技術。一般的使用狀態下,一張網卡只需要一組IP位置,但是有許多時候我們為了安全性/管理方便,會希望一張網卡能有一個以上的IP,因此會使用IP aliasing。
Debian/Ubuntu系列的好處就是設定檔只有一個,一目了然。
停止了惱人的network-manager之後,修改/etc/network/interfaces:
# The loopback network interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
 address 192.168.150.124
 netmask 255.255.255.0
 gateway 192.168.150.254

auto eth0:1
iface eth0:1 inet static
 address 192.168.150.125
 netmask 255.255.255.0
紅色字體是額外新增的部份。儲存後,重新啟動你的網路:
/etc/init.d/networking restart
想要新增更多個IP是可行的,只要繼續往下附加上新的位置即可。甚至主要IP以dhcp取得也行:
# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:1
iface eth0:1 inet static
 address 192.168.150.125
 netmask 255.255.255.0
有幾點需要特別提醒:
  • eth0:1可以跟eth0必須在相同網段。
  • eth0:1無法使用dhcp。

Share

2012年9月7日 星期五

Debian Gnome3桌面筆記

多年以前寫的圖解Debian桌面安裝筆記,如今看來這些資訊過時的速度令人咋舌。Gnome3的桌面我曾經抗拒了好一段時間,畢竟好不容易熟悉的環境以及設定檔,甚至是legacy grub都變成了grub2,原本最喜歡的輸入法框架oxim也已經完全無法在Gnome3安裝使用了。看來唯一的方法就是面對他...或是龜縮在stable的Debian或是Ubuntu 10.04的美好時代。
可能是我已經過了追求美麗桌面的年紀,這篇筆記文純粹作為自己筆記用,可能甚至不具任何參考價值;如果各位覺得有用就笑納,覺得廢文一篇也不妨嘲諷幾句~

Install Debian Wheezy

現在的Debian安裝過程已經比從前那個年代要容易多了。在我寫這篇文章的時候,wheezy還是testing;但我相信未來的stable版本也會納入gnome3,所以請至少安裝wheezy以上的Debian。sources.list如下:

如果您是使用AMD64的CPU,請多下一行指令:
dpkg --add-architecture i386 && apt-get update

Install NVIDIA driver

Debian預設會使用nouveau當作driver;然而他是逆向工程的傑作,並不是人人都有同樣每好的經驗。因此對於NVIDIA的使用者而言,安裝nvidia driver通常是必要的步驟。事實上安裝nvidia driver在Debian裡實在是非常友善。請確定你有啟用contrib與non-free,並且已安裝kernel headers套件:
aptitude install linux-headers-`uname -r`
如果可以安裝kernel headers,那麼透過網路安裝nvidia driver就非常方便。接著我們把步驟簡化如下:
aptitude install module-assistant nvidia-kernel-common -y
m-a auto-install nvidia-kernel-source
aptitude install nvidia-glx nvidia-xconfig -y
安裝過程中會提示nouveau與nvidia modules相衝突,解決的方法就是重新啟動系統。我確定nouveau確實有被加入modprobe的黑名單裡,不過重開機之後console裡仍然會出現許多nouveau與nvidia相衝突的訊息,一時想到的方法只有到grub裡去修改。在/etc/grub.d/10_linux裡大約114-116行之間是定義kernel參數的部份:
linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
請在最後面多加個nouveau.blacklist=1,然後把設定寫入到grub裡:
update-grub
重新開機之後,就有完美的nvidia支援了!關於NVIDIA與Debian的相關資料,請參閱NvidiaGraphicsDrivers

Install ATI driver

Debian預設會使用radeon當作driver。對於ATI的使用者而言,radeon雖然是open source的driver,可是他的效能確實不太理想(不太理想是好聽話...大部分時候是X window整個起不來),因此建議還是安裝propriotary的driver--fglrx。fglrx這個字實在是又怪又難唸,原來他是FireGL and Radeon for X的簡稱,真不知道是哪個天才想出來如此好記好懂的簡稱。

在Debian Squeeze(目前的stable版本)才有fglrx的支援;如果你使用的剛好是Squeeze,則可以透過安裝kernel headers以及fglrx-driver來達成,Wheezy則需要到AMD官方網站下載符合自己顯卡的driver。
由於radeon與fglrx還是會衝突,因此還是需要把radeon.blacklist=1寫入到/etc/grub.d/10_linux裡,再更新grub設定,詳情就請看NVIDIA的設定作參考囉。
關於fglrx與Debian的相關資料,請參閱ATIPropriotary

一些好用的套件與設定

aptitude install vim nautilus-open-terminal gnome-tweak-tool sysv-rc-conf dconf-tools fcitx-chewing im-config -y
  1. /etc/vim/vimrc
  2. 除了把syntax on啟動之外,另外我還多加了set ai, set ts=4這兩個參數。
  3. nautilus-open-terminal
  4. 按右鍵開啟終端機,這個功能不裝就太對不起自己了。
  5. gnome-tweak-tool
  6. 安裝完成後可以在Applications找到Advanced Settings,這時就可以啟用桌面功能等等。

  7. sysv-rc-conf
  8. 在Debian/Ubuntu系統下建議都使用這個utility來控制daemons。

  9. dconf-tools
  10. 相當於之前的gconf-editor,這個是專門提供Debian/Ubuntu設定Gnome桌面專用的Utility。
  11. HIME
  12. 我喜歡使用HIME輸入法框架,而他也已經包含在Debian官方套件庫裡。
    aptitude install hime hime-chewing -y
    安裝完畢後,會需要使用im-config來設定預設輸入法。如果您不習慣gcin-like的輸入法,您也可以選擇fcitx。
  13. fcitx-chewing
  14. 先前使用Gnome3的經驗,就是使用IBus做為輸入法框架。IBus本身可能沒有大問題,但是我恨透了IBus裡面的酷音模組,想利用shift鍵臨時切換中英文,結果卻打出一堆沒有意義的代碼;

    在IBus的荼毒下,要切換中英文就等於要啟動/關閉整個IBus!!不過我發現fcitx這個中文輸入法框架的酷音模組可以達到我的需求!
    利用im-config來設定fcitx為預設的輸入法框架。不過,fcitx預設切換中英文卻是左側的CTRL鍵。圖形界面的config設定裡卻也沒辦法設定利用capslock鍵作為切換中英文的快速鍵!好在這一切都可以修改!
    找到~/.config/fcitx/config這個檔案,再找TriggerKey這個Option指定CAPSLOCK即可:

    安裝成功後,輸入im-config以啟用fcitx。
  15. Adobe Flash Player
  16. 老把戲再玩一次,請參考建立flashplayer的deb檔
  17. Java plugins
  18. 也是老把戲了,請參考Java on non-RPM Linux

GNOME Shell Extensions

GNOME Shell extensions放在~/.local/share/gnome-shell/extensions/裡,所有的extensions全部都是Javascript,非常非常具有彈性。最簡易安裝的方法就是到Gnome-Shell extensions的網站直接拖拉啟動bar安裝。我常安裝的extensions如下:
  1. Coverflow Alt-Tab
  2. 賞心悅目的Coverflow~~
  3. Window options
  4. This extension allows you to use options for each application. Very handy!!!
  5. Extension List


  6. 一個可以一目了然的extensions list
  7. Alternative Status Menu
  8. 原本系統的狀態鈕只能選擇suspend,現在可以使用關機了。
  9. Window List
  10. 萬歲!我的Gnome3終於有工作列可以使用了!e
    P.S. For Newer gnome3(e.g. 3.8), this extension may not work functionally. Please git latest WindowList from github:
    git clone --recursive git://github.com/siefkenj/gnome-shell-windowlist
    cd gnome-shell-windowlist
    cp -r windowlist@o2net.cl ~/.local/share/gnome-shell/extensions/
    Then go to tweak tool to activate it.
  11. Frippery Move Clock
  12. This extension will set Date and Time to the right corner.
  13. Advanced Settings in UserMenu
  14. 在控制項就有進階設定可以選擇!
  15. Remove Accessibility
  16. 把完全用不到的輔助工具功能移除!
  17. Advanced Volume Mixer
  18. 不只是控制系統音量,還可以直接控制個別多媒體的音量。
  19. Axe Menu
  20. 現在也有更直覺化的圖示可以用!
  21. Media Player Indicator
  22. 可以輕易的控制歌曲、節目、音量、時間軸等等,不必真的點程式本身。
  23. system-monitor
  24. 一個看起來相當fancy的system monitor小程式!!須注意這個js需要配幾個重要的套件,以Debian來說,你還需要確定gir1.2-gtop-2.0 gir1.2-networkmanager-1.0這兩個套件有備正確安裝才行。
  25. SystemMonitor
  26. 這個小套件只是一個很簡單的輔助用途,就是當滑鼠移到右下角時,會在左下角看到目前系統的負載。
  27. Impatience
  28. 據說這個套件可以加速GNOME Shell約25%!!我個人的感覺是沒有快這麼多,但是動畫特效確實速率較好!
  29. Show Desktop Button
  30. 左上角就有一個圖示可以快速的顯示桌面!
  31. Force Quit
  32. 左上角會有一個X圖示,可以強迫關閉某個未回應的應用程式。
  33. Places Status Indicator
  34. 在上方工作列也能快速存取常用資料夾。
  35. Setting Center
  36. 控制中心,快速的找到想要的設定!
  37. Gnome底下快速視窗鋪排工具 -- shellshape
  38. 不過真正要達到完全自訂鋪排方式,可能需要背一下快速鍵。請參考shellshape官方網站。

差不多就是這麼簡單了!

Share