linux雙網卡做網橋
若將virtual box的網絡連接方式設為NAT,則虛擬機可以直接與外網相連,但不能與宿主機相連。以下將virtual box的網絡連接方式設為host interface方式。實現了虛擬機可以與宿主機相連,同時也可以連接互聯網。
一、主機上已有網卡ip為192.168.1.3。在主機上做以下步驟新建一張虛擬網卡以供與虛擬機網絡數據交換使用。
(1)、安裝提供tunctl與brctl工具的軟件包
yum install tunctl-1.5-1.fc10 bridge-utils -y
(2)、設置允許轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
(3)、利用iptables完成ip數據包轉發功能
iptables -t nat -A POSTROUTING -j MASQUERADE
(4)、設定允許Virtual Box訪問/dev/net/tun文件
chmod 0666 /dev/net/tun
(5)、tap設備tap0當作虛擬網卡,其所有者設為mygod用戶,這裡要注意一定要將所有者設成自己的帳戶,否則運行虛擬機會出錯
tunctl -t tap0 -u mygod
(6)、激活虛擬網卡
ifconfig tap0 up
(7)、設定虛擬網卡的ip與掩碼
ifconfig tap0 10.0.2.3 netmask 255.255.255.0
二、打開Virtual Box,在虛擬機的網絡設置中,將連接方式設為host interface,並且將Host Interface Settings中的Interface Name填為tap0。
三、進入虛擬機CentOS-5.2後,運行以下命令。
(1)、運行system-config-network,對eth0網卡作以下設置:
ip:10.0.2.4
netmask:255.255.255.0
gate way:10.0.2.3
(2)、重新激活eth0網卡
ifdown eth0
ifup eth0
四、解決問題:
以上步驟做完之後,在虛擬機上能夠正確ping到宿主機192.168.1.3,但卻無法連接外網,並且ping網關192.168.1.1收到From 10.0.2.3 icmp_seq=1 Destination Host Prohibited的提示。
使用iptables -t filter --list命令後發現filter表中的FORWARD鏈裡有一條
“REJECT all -- anywhere anywhere reject-with icmp-host-prohibited”。
想想應該就是這一條規則作怪,於是執行以下命令:iptables -t filter -F FORWARD。
OK,現在可以ping通網關了,但ping www.163.com還是得到unknown host www.163.com的提示。看來是虛擬機的DNS設置的問題。於是打開/etc/resolv.conf文件,填加“nameserver 192.168.3.1”。搞定!
五、宿主機重啟後只要以root帳戶再次運行以下腳本即可:
#!/bin/bash
tunctl -d tap0
tunctl -t tap0 -u mygod
ifconfig tap0 up
ifconfig tap0 10.0.2.3 netmask 255.255.255.0
iptables -t filter -F FORWARD
iptables -t nat -A POSTROUTING -j SNAT -s 10.0.2.0/24 --to-source 192.168.3.3
echo 1 > /proc/sys/net/ipv4/ip_forward