所以我正在编写一个程序,用命名空间隔离自己,但我仍然坚持让网络工作,因为我想要它 . 我打算通过Tor路由我的应用程序,这是一个在网络接口上公开SocksPort的Socks5代理 .

我的应用程序需要工作,当它已经与虚拟机隔离并且只有主机路由时,主机上的Tor绑定说vboxnet1(192.168.56.1:9051),VM内部的eth0是(192.168.56.101),然后我有网络名称空间 . 因此,我不能简单地使用veth对并将Tor绑定到父命名空间上的veth,因为Tor甚至不在虚拟机中 . 所以最终,我需要在192.168.56.1:9051上从命名空间到父命名空间中的eth0(192.168.56.101)连接到SocksPort . 但是,当我不在虚拟机中时,以及当Tor在父命名空间中时(而不是具有父命名空间的VM的主机),我使用的解决方案也应该工作 .

这只是为什么veth对等为什么对我不起作用的背景,一般来说我想做什么,我的问题更具体;

我按照以下链接的指南:http://blog.scottlowe.org/2014/03/21/a-follow-up-on-linux-network-namespaces/

在Linux 3.16上

我现在就做,并显示我正在键入的确切命令:

ip netns添加蓝色

ip link add link eth0 name eth0.100 type vlan id 100

此时“ip -d link”显示以下内容(MAC编辑出来);

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether promiscuity 0 

352: eth0.100@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    promiscuity 0 
    vlan protocol 802.1Q id 100 <REORDER_HDR>

ip link set eth0.100 netns blue

我注意到蓝色命名空间中的ip -d链接具有以下输出

ip netns exec blue ip -d link

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 

352: eth0.100@if2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    promiscuity 0 
    vlan protocol 802.1Q id 100 <REORDER_HDR>

请注意,它现在是eth0.100@if2而不是@ eth0,我不确定这是否相关 .

我提出了loopback,这实际上不在我提到的指南中,但我认为是必需的:

ip netns exec blue ip link set dev lo up

ip netns exec blue ip addr add 192.168.56.102/24 dev eth0.100

ip netns exec blue ip link set eth0.100 up

ip netns exec blue ifconfig现在显示(略微编辑出来)

eth0.100  Link encap:Ethernet   
          inet addr:192.168.56.102  Bcast:0.0.0.0  Mask:255.255.255.0
          Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:5598 (5.5 KB)

来自父命名空间ifconfig显示

eth0      Link encap:Ethernet  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

但是当我尝试从命名空间ping时,按照指南;

ip netns exec blue ping -c 4 192.168.56.101

PING 192.168.56.101(192.168.56.101)56(84)字节的数据 .

从192.168.56.102 icmp_seq = 1目标主机无法访问

它总是无法访问,如果我尝试192.168.56.1也是一样,这最终是我想要连接的(它是主机上的vboxnet,可以从vm中的eth0路由到,但我甚至不能从命名空间路由到eth0,即使将vlan接口添加到命名空间也是如此 .

感谢任何帮助,我一直试图这样做几个小时,我几乎耗尽了每一个资源 .