我试图从网络命名空间中选择外部ip (在本例中是google)。
ip netns add ns1
# Create v-eth1 and v-peer1: v-eth1 is in the host space whereas peer-1 is supposed to be in the ns
ip link add v-eth1 type veth peer name v-peer1
# Move v-peer1 to ns
ip link set v-peer1 netns ns1
# set v-eth1
ip addr add 10.200.1.1/24 dev v-eth1
ip link set v-eth1 up
# Set v-peer1 in the ns
ip netns exec ns1 ip addr add 10.200.1.2/24 dev v-peer1
ip netns exec ns1 ip link set v-peer1 up
# Set loopback interface in the ns
ip netns exec ns1 ip link set lo up
# Add defaut route in the ns
ip netns exec ns1 ip route add default via 10.200.1.1
# Set host routing tables
iptables -t nat -A POSTROUTING -s 10.200.1.0/24 -j MASQUERADE
# Enable routing in the host
sysctl -w net.ipv4.ip_forward=1
#
ip netns exec ns1 ping 8.8.8.8由于某些原因,这在virtualbox (我的笔记本电脑上)的VM内部运行良好,它在我的桌面上工作(ubuntu18.04),但是它不能在笔记本电脑上运行我的主机os (这太Ubuntu18.04了)。
我试过traceroute,这就是我得到的
在笔记本电脑上

在桌面上

你们中有人知道我应该调查什么才能找到问题吗?据我所知,我没有设置防火墙(ufw被禁用)
编辑:这就是我在iptables中得到的-保存-c:
# Generated by iptables-save v1.6.1 on Fri Jan 17 18:05:36 2020
*filter
:INPUT ACCEPT [3774:2079111]
:FORWARD DROP [5:420]
:OUTPUT ACCEPT [3053:308301]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
[16984:18361691] -A FORWARD -j DOCKER-USER
[16984:18361691] -A FORWARD -j DOCKER-ISOLATION-STAGE-1
[12139:18094316] -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[0:0] -A FORWARD -o docker0 -j DOCKER
[4761:260319] -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
[0:0] -A FORWARD -i docker0 -o docker0 -j ACCEPT
[0:0] -A FORWARD -o br-6a72e380ece6 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[0:0] -A FORWARD -o br-6a72e380ece6 -j DOCKER
[0:0] -A FORWARD -i br-6a72e380ece6 ! -o br-6a72e380ece6 -j ACCEPT
[0:0] -A FORWARD -i br-6a72e380ece6 -o br-6a72e380ece6 -j ACCEPT
[4761:260319] -A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
[0:0] -A DOCKER-ISOLATION-STAGE-1 -i br-6a72e380ece6 ! -o br-6a72e380ece6 -j DOCKER-ISOLATION-STAGE-2
[16984:18361691] -A DOCKER-ISOLATION-STAGE-1 -j RETURN
[0:0] -A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
[0:0] -A DOCKER-ISOLATION-STAGE-2 -o br-6a72e380ece6 -j DROP
[4761:260319] -A DOCKER-ISOLATION-STAGE-2 -j RETURN
[16984:18361691] -A DOCKER-USER -j RETURN
COMMIT
# Completed on Fri Jan 17 18:05:36 2020
# Generated by iptables-save v1.6.1 on Fri Jan 17 18:05:36 2020
*nat
:PREROUTING ACCEPT [406:111092]
:INPUT ACCEPT [9:703]
:OUTPUT ACCEPT [29:2283]
:POSTROUTING ACCEPT [28:2114]
:DOCKER - [0:0]
[253:19770] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
[0:0] -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
[4:249] -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
[0:0] -A POSTROUTING -s 172.18.0.0/16 ! -o br-6a72e380ece6 -j MASQUERADE
[1:169] -A POSTROUTING -s 10.200.1.0/24 -j MASQUERADE
[0:0] -A DOCKER -i docker0 -j RETURN
[0:0] -A DOCKER -i br-6a72e380ece6 -j RETURN
COMMIT
# Completed on Fri Jan 17 18:05:36 2020发布于 2020-01-17 17:35:40
您有Docker,它本身改变了防火墙规则。我不知道这是不是因为Docker,但是您已经设置了iptable的过滤器/转发的默认策略,以防止任何不显式允许的路由。
编辑:添加返回方向。
要使您的实验成功,这应该足够了(包括还必须启用的返回通信量):
iptables -A FORWARD -i v-eth1 -j ACCEPT
iptables -A FORWARD -o v-eth1 -j ACCEPT请注意,这些内容可以与互联网络的接口进行补充,但我没有它的名称。
通常更喜欢使用下面的规则,允许返回的流量通过有状态的跟踪:连接跟踪,因此必须只关心初始的流量。试试看吧。
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i v-eth1 -j ACCEPT顺便提一句,内核>= 4.7通常需要/允许更多设置有连接跟踪助手(ftp.)要正确/安全地工作,但这不是您的实验所需要的(ICMP是处理的)。这个博客中的一些信息:安全使用iptable和连接跟踪帮助程序。
如果有疑问(如与Docker的交互),请使用-I,以确保在其他任何事情之前插入您的规则。请注意,重新启动Docker可能会再次改变规则。现在您知道问题出在哪里了,这取决于您在引导和Docker过程中集成它。
您可能有兴趣阅读Docker关于它使用iptables:码头工人和iptables的文档。
https://unix.stackexchange.com/questions/562638
复制相似问题