您尚未登录。

#1 2014-01-03 13:57:53

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

请问虚拟机中如何使用双网卡?

virtualbox中使用桥接方式和NAT,dhcp是为了上网的,static是为了与主机通信。
有个问题,ethernet-static永远都是优先使用,必须停掉static,才能dhcp上网。
#netctl list
* ethernet-static
  ethernet-dhcp

离线

#2 2014-01-03 14:07:15

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 请问虚拟机中如何使用双网卡?

要处理下路由表。我都是手工用 route 或者 ip route 命令做的。

离线

#3 2014-01-06 11:14:01

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

Re: 请问虚拟机中如何使用双网卡?

还是搞不定,我的主机是通过端口代理上网的,虚拟机中也指定了代理服务器才能上网。跟这有关系吗?
eth0: 10.0.2.15  dhcp  NAT 上网用的
eth1: 192.168.1.23 static 桥接
主机: 192.168.1.103
公司代理服务器: 192.168.1.10:808
eth1虽然与主机在同一网段,但是公司mac绑定上不了网,只能通过eth0
route add -net 192.168.1.0 netmask 255.255.255.0 eth0 没啥效果

离线

#4 2014-01-06 12:07:45

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 请问虚拟机中如何使用双网卡?

那你只用 host only 网卡好了,主机建立个 NAT,这样既可以与主机通讯又可以上外网了。vbox 好像新加了个网卡模式就是这么干的。

离线

#5 2014-01-07 08:39:49

wxg4net
会员
注册时间: 2012-01-07
帖子: 274

Re: 请问虚拟机中如何使用双网卡?

host only 模式加 iptables 主机ip转发 即可完美使用 详见 http://my.oschina.net/huozhe3136/blog/100237


Arch Linux User

离线

#6 2014-01-07 15:35:16

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

Re: 请问虚拟机中如何使用双网卡?

本来是用host only挺好的,但有个致命问题,主机端没法当成真正的接口使用,我搞网络开发,如果将VirtualBox Host-Only Network作为服务端bind,客户端就无法连接,错误提示这个socket是异步的不能立即完成之类的。

离线

#7 2014-01-07 17:16:46

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 请问虚拟机中如何使用双网卡?

chenzhengxi 说:

本来是用host only挺好的,但有个致命问题,主机端没法当成真正的接口使用,我搞网络开发,如果将VirtualBox Host-Only Network作为服务端bind,客户端就无法连接,错误提示这个socket是异步的不能立即完成之类的。

这样?

Shell 1:

>>> ifconfig vboxnet0
vboxnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.1  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::800:27ff:fe00:0  prefixlen 64  scopeid 0x20<link>
        ether 0a:00:27:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 107  bytes 14867 (14.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

10106 ~tmp
>>> py
Python 3.3.3 (default, Nov 26 2013, 13:33:18) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket()
>>> s.bind(('192.168.56.1', 1234))
>>> s.listen(10)
>>> s.accept()
(<socket.socket object, fd=5, family=2, type=1, proto=0>, ('192.168.56.3', 41251))
>>> _[0].recv(1024)
b'abc'
>>> 

Shell 2:

>>> DISPLAY=:0 VBoxManage startvm Arch32
Waiting for VM "Arch32" to power on...
VM "Arch32" has been successfully started.
10004 ~tmp
>>> ssh root@192.168.56.3
Last login: Sun Jan  5 00:49:18 2014 from 192.168.56.1
251 ~
### py
Python 3.3.3 (default, Nov 26 2013, 13:47:45) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket()
>>> s.connect(('192.168.56.1', 1234))
>>> s.send(b'abc')
3
>>> 
252 ~
### 
Connection to 192.168.56.3 closed.

离线

#8 2014-01-09 15:17:36

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

Re: 请问虚拟机中如何使用双网卡?

百合仙子 说:
chenzhengxi 说:

本来是用host only挺好的,但有个致命问题,主机端没法当成真正的接口使用,我搞网络开发,如果将VirtualBox Host-Only Network作为服务端bind,客户端就无法连接,错误提示这个socket是异步的不能立即完成之类的。

这样?

Shell 1:

>>> ifconfig vboxnet0
vboxnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.1  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::800:27ff:fe00:0  prefixlen 64  scopeid 0x20<link>
        ether 0a:00:27:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 107  bytes 14867 (14.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

10106 ~tmp
>>> py
Python 3.3.3 (default, Nov 26 2013, 13:33:18) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket()
>>> s.bind(('192.168.56.1', 1234))
>>> s.listen(10)
>>> s.accept()
(<socket.socket object, fd=5, family=2, type=1, proto=0>, ('192.168.56.3', 41251))
>>> _[0].recv(1024)
b'abc'
>>> 

Shell 2:

>>> DISPLAY=:0 VBoxManage startvm Arch32
Waiting for VM "Arch32" to power on...
VM "Arch32" has been successfully started.
10004 ~tmp
>>> ssh root@192.168.56.3
Last login: Sun Jan  5 00:49:18 2014 from 192.168.56.1
251 ~
### py
Python 3.3.3 (default, Nov 26 2013, 13:47:45) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket()
>>> s.connect(('192.168.56.1', 1234))
>>> s.send(b'abc')
3
>>> 
252 ~
### 
Connection to 192.168.56.3 closed.

不是这样的,虚拟机做服务器,主机访问,shell 2 应该在主机端,错误依旧(the socket is makred as nonblocking ...)

离线

#9 2014-01-09 15:30:53

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

Re: 请问虚拟机中如何使用双网卡?

搞不定,经hostonly通信。
主机做服务端,虚拟机当客户端正常使用,反过来就不行。
主机做服务器,主机访问主机也不行。
虚拟机做服务器,虚拟机访问没问题。

离线

#10 2014-01-09 15:54:32

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 请问虚拟机中如何使用双网卡?

chenzhengxi 说:

不是这样的,虚拟机做服务器,主机访问,shell 2 应该在主机端,错误依旧(the socket is makred as nonblocking ...)

反过来也没问题(实际上 ssh 没问题已经说明没有问题了):

shell 1:

10005 ~tmp 
>>> DISPLAY=:0 VBoxManage startvm Arch32
Waiting for VM "Arch32" to power on...
VM "Arch32" has been successfully started.
10006 ~tmp
>>> ssh root@192.168.56.3
Last login: Sun Jan  5 00:53:49 2014 from 192.168.56.1
251 ~
### py
Python 3.3.3 (default, Nov 26 2013, 13:47:45) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket()
>>> s.bind(('192.168.56.3', 1234))
>>> s.listen(10)
>>> s.accept()
(<socket.socket object, fd=4, family=2, type=1, proto=0>, ('192.168.56.1', 52252))
>>> s = _[0]
>>> s.send(b'aaa')
3
>>> s.recv(1024)
b'abc'
>>> 
251 ~
### 
Connection to 192.168.56.3 closed.
10007 ~tmp
>>> DISPLAY=:0 VBoxManage controlvm Arch32 savestate
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

shell 2:

10536 ~tmp 
>>> py
Python 3.3.3 (default, Nov 26 2013, 13:33:18) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket()
>>> s.connect(('192.168.56.3', 1234))
>>> s.send(b'abc')
3
>>> s.recv(1024)
b'aaa'

你确定不是你那个报错的程序自身的问题?

离线

#11 2014-01-10 11:45:03

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

Re: 请问虚拟机中如何使用双网卡?

百合仙子 说:

你确定不是你那个报错的程序自身的问题?

我非常确定我那个报错的程序自身有问题...
我的程序用的是非阻塞的socket,用的网络调试助手估计也是非阻塞的。
阻塞连接没问题。
我再研究下,但可以肯定这个虚拟网卡没真网卡好使。

离线

#12 2014-01-10 12:46:53

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 请问虚拟机中如何使用双网卡?

那你确定你会用非阻塞 socket?非阻塞 socket 出现那个错误很正常啊……

离线

#13 2014-01-21 11:10:29

chenzhengxi
会员
注册时间: 2013-05-22
帖子: 9

Re: 请问虚拟机中如何使用双网卡?

百合仙子 说:

那你确定你会用非阻塞 socket?非阻塞 socket 出现那个错误很正常啊……

搞定了,这个接口稍微有点延时,习惯用非阻塞还不加判断做测试,这次栽了。

离线

页脚