今天打開VirtualBox的CentOS,發現不能上網了,很奇怪。
基本設置是這樣的:
主機:windows 7 ultimate x64 SP1
VirtualBox: 4.1.8
虛擬機系統: CentOS 5.7
Virtualbox 上選擇了兩塊網卡,一塊 Host Only ,一塊 NAT。
開機后發現外網不能上了,Host Only的內容都是正常的。查看路由如下:
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.2.0 * 255.255.255.0 U 0 0 0 eth0
192.168.56.0 * 255.255.255.0 U 0 0 0 eth1
169.254.0.0 * 255.255.0.0 U 0 0 0 eth1
default 192.168.56.1 0.0.0.0 UG 0 0 0 eth1
發現默認的網關跑到 Host Only 上去了,怎么可能上外網呢。小白一個,但是也知道這樣是不行的,果斷放狗,搜的高端指導若干。
1.雙網卡(關鍵啊關鍵。。。)
注:
linux雙網卡默認路由問題
在安裝第二塊網卡后出現無法上網問題,使用route發現是默認路由出現問題,經過多 發查證,才曉得原來linux在加載網卡配置文件的時候是先加載eth0,再加載eht1的,這樣,如果eth1設置了gateway項,則會覆蓋掉 eth0中的gateway設置,因此解決方法就是刪除eth1的gateway設置,文件位置在/etc/sysconfig/networking /devices目錄下,刪除eth1中的gateway設置。
參考: http://hi.baidu.com/%C5%B7%D1%F4%D3%FE%B3%CF/blog/item/974ef71f0c1c4f0a403417cf.html
2.route 命令使用
參見下文。
果斷調整,調整 Virtualbox,第一個網卡為 Host Only,第二塊網卡為 NAT。(也可以不動 Virtualbox,直接在Linux把第二塊物理網卡映射為 eth0,把第一塊映射成 eht1,應該也是可以的。),把Host-Only的固定IP設置到到 eth0 上,重啟網絡,輸出路由:
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 10.0.3.2 0.0.0.0 UG 0 0 0 eth1
看重點,默認IP已經換掉了哇。這樣就可以上外網了啊。。。
【轉】route 的使用:
http://blog.chinaunix.net/space.php?uid=22006903&do=blog&id=149739
使用下面的 route 命令可以查看 Linux 內核路由表。
# route
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
route 命令的輸出項說明
輸出項 | 說明 |
---|---|
Destination | 目標網段或者主機 |
Gateway | 網關地址,”*” 表示目標是本主機所屬的網絡,不需要路由 |
Genmask | 網絡掩碼 |
Flags | 標記。一些可能的標記如下: |
U — 路由是活動的 | |
H — 目標是一個主機 | |
G — 路由指向網關 | |
R — 恢復動態路由產生的表項 | |
D — 由路由的后台程序動態地安裝 | |
M — 由路由的后台程序修改 | |
! — 拒絕路由 | |
Metric | 路由距離,到達指定網絡所需的中轉數(linux 內核中沒有使用) |
Ref | 路由項引用次數(linux 內核中沒有使用) |
Use | 此路由項被路由軟件查找的次數 |
Iface | 該路由表項對應的輸出接口 |
3 種路由類型
主機路由
主機路由是路由選擇表中指向單個IP地址或主機名的路由記錄。主機路由的Flags字段為H。例如,在下面的示例中,本地主機通過IP地址192.168.1.1的路由器到達IP地址為10.0.0.10的主機。
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
網絡路由
網絡路由是代表主機可以到達的網絡。網絡路由的Flags字段為N。例如,在下面的示例中,本地主機將發送到網絡192.19.12的數據包轉發到IP地址為192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ----- --- --- -----
192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
默認路由
當主機不能在路由表中查找到目標主機的IP地址或網絡路由時,數據包就被發送到默認路由(默認網關)上。默認路由的Flags字段為G。例如,在下面的示例中,默認路由是IP地址為192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
配置靜態路由
route 命令
設置和查看路由表都可以用 route 命令,設置內核路由表的命令格式是:
# route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
-
add : 添加一條路由規則
-
del : 刪除一條路由規則
-
-net : 目的地址是一個網絡
-
-host : 目的地址是一個主機
-
target : 目的網絡或主機
-
netmask : 目的地址的網絡掩碼
-
gw : 路由數據包通過的網關
-
dev : 為路由指定的網絡接口
route 命令使用舉例
添加到主機的路由
# route add -host 192.168.1.2 dev eth0:0 # route add -host 10.20.30.148 gw 10.20.30.40
添加到網絡的路由
# route add -net 10.20.30.40 netmask 255.255.255.248 eth0 # route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 # route add -net 192.168.1.0/24 eth1
添加默認路由
# route add default gw 192.168.1.1
刪除路由
# route del -host 192.168.1.2 dev eth0:0 # route del -host 10.20.30.148 gw 10.20.30.40 # route del -net 10.20.30.40 netmask 255.255.255.248 eth0 # route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 # route del -net 192.168.1.0/24 eth1 # route del default gw 192.168.1.1
設置包轉發
在 CentOS 中默認的內核配置已經包含了路由功能,但默認並沒有在系統啟動時啟用此功能。開啟 Linux 的路由功能可以通過調整內核的網絡參數來實現。要配置和調整內核參數可以使用 sysctl 命令。例如:要開啟 Linux 內核的數據包轉發功能可以使用如下的命令。
# sysctl -w net.ipv4.ip_forward=1
這樣設置之后,當前系統就能實現包轉發,但下次啟動計算機時將失效。為了使在下次啟動計算機時仍然有效,需要將下面的行寫入配置文件/etc/sysctl.conf。
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
用戶還可以使用如下的命令查看當前系統是否支持包轉發。
# sysctl net.ipv4.ip_forward