Wie kann man enp0s3 mit einem Kollegen von veth verbinden?

1308
TorosFanny

Meine Runde: Ubuntu 15.10. Und ich habe eine drahtgebundene Netzwerkkarte enp0s3. Ich möchte ein veth Paar erstellen veth0und veth1und überbrücken sie mit enp0s3und setzen veth1auf eine neue netns ns1, so dass Prozesse in ns1das Internet über Link - Layer zugreifen können.

Aber es ist seltsam, dass veth1kein Ping möglich ist enp0s3. Das Folgende ist meine Schritte.

root@qs-vs:~# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:62:3c:59 brd ff:ff:ff:ff:ff:ff root@qs-vs:~# ip netns add ns1 root@qs-vs:~# ip link add type veth root@qs-vs:~# ip link set veth1 netns ns1 root@qs-vs:~# ip link add bridge type bridge root@qs-vs:~# ip link set enp0s3 master bridge root@qs-vs:~# ip link set veth0 master bridge root@qs-vs:~# ip link set up veth0 root@qs-vs:~# ip link set up enp0s3 root@qs-vs:~# ip link set up bridge root@qs-vs:~# ip netns exec ns1 ip link set up veth1 root@qs-vs:~# ip addr add 192.168.222.1/24 dev enp0s3 root@qs-vs:~# ip netns exec ns1 ip addr add 192.168.222.101/24 dev veth1 root@qs-vs:~# ping 192.168.222.101 PING 192.168.222.101 (192.168.222.101) 56(84) bytes of data. From 192.168.222.1 icmp_seq=1 Destination Host Unreachable From 192.168.222.1 icmp_seq=2 Destination Host Unreachable From 192.168.222.1 icmp_seq=3 Destination Host Unreachable From 192.168.222.1 icmp_seq=4 Destination Host Unreachable From 192.168.222.1 icmp_seq=5 Destination Host Unreachable From 192.168.222.1 icmp_seq=6 Destination Host Unreachable ^C --- 192.168.222.101 ping statistics --- 7 packets transmitted, 0 received, +6 errors, 100% packet loss, time 6028ms pipe 3 

Ich habe auch versucht, Promisc mit enp0s3 einzuschalten, aber es hilft nicht.

1

2 Antworten auf die Frage

1
MariusMatutiae

Es gibt zwei Fehler in den oben genannten. Wenn Sie die vethIF mit überbrücken enp0s3, werden Sie die Pings außerhalb Ihres PCs senden, während Sie mit einem anderen Teil Ihres PCs kommunizieren möchten. Zweitens ist die Syntax des Befehls, der die vethSchnittstelle festlegt, falsch.

Sie sollten die vethSchnittstelle mit einer anderen virtuellen Schnittstelle überbrücken tap0. dann sehen Sie Ihre Pings zurückkommen. Versuchen Sie es wie folgt:

 NNS=WhateverYouWantToCallTheNewNetworkNameSpace ip netns add $NNS ip link add veth-a$NNS type veth peer name veth-b$NNS ip link set veth-a$NNS up ip tuntap add tap$NNS mode tap user root ip link set tap$NNS up ip link add br$NNS type bridge ip link set tap$NNS master br$NNS ip link set veth-a$NNS master br$NNS ip addr add 10.0.0.1/24 dev br$NNS ip link set br$NNS up ip link set veth-b$NNS netns $NNS ip netns exec $NNS ip addr add 10.0.0.2/24 dev veth-b$NNS ip netns exec $NNS ip link set veth-b$NNS up ip netns exec $NNS ip link set dev lo up 

Ich habe die loSchnittstelle nur hinzugefügt, weil sie in Zukunft nützlich sein wird. Jetzt können Sie pingen,

 ping -c1 10.0.0.2 

und Sie werden die Pings wiederkommen sehen.

BEARBEITEN:

Wie kann ich auf den Internet-Wurf zugreifen? veth-b $ NNS und der MAC von veth-b $ NNS müssen für meinen ISP sichtbar sein

Es gibt keine Möglichkeit, die beiden vethIhrem ISP auszusetzen . Dennoch sollte Folgendes gut funktionieren:

  1. Aus irgendeinem Grund, den ich nicht verstehe, muss vor allen vorherigen Befehlen Folgendes ausgeführt werden:

    NNS=WhateverYouWantToCallTheNewNetworkNameSpace /bin/mkdir -p /etc/netns/$NNS echo "nameserver 8.8.8.8" > /etc/netns/$NNS/resolv.conf echo "nameserver 8.8.4.4" >> /etc/netns/$NNS/resolv.conf 

Dadurch erhalten Sie eine DNS-Auflösung. Denken Sie jedoch daran, dass dies vor den obigen Befehlen geschehen muss!

  1. Erlauben Sie auf Ihrem Host die IPv4-Weiterleitung und das MASQUERADING:

    echo 1 > /proc/sys/net/ipv4/ip_forward  iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE 
  2. Fügen Sie Ihrem neuen Netzwerknamensraum ein Gateway hinzu:

    ip netns exec $NNS ip route add default via 10.0.0.1 
  3. Geben Sie nun Ihren neuen Netzwerk-Namespace ein. Ich erstelle dazu einen xtermBefehl und tippe dann darin Befehle ein, die sich notwendigerweise im neuen NNS befinden:

    ip netns exec $NNS su -c xterm YourName & 

Wenn Sie xterm nicht mögen, können Sie beliebige Arten von Terminals verwenden (wenn Sie kein xterm haben, installieren Sie es einfach apt-get install xterm).

Das sollte funktionieren.

Danke für die wunderbare Antwort. Es funktioniert und du hast mir nützliche Tipps beigebracht. TorosFanny vor 8 Jahren 0
@TorosFanny Gern geschehen !! MariusMatutiae vor 8 Jahren 0
Ich weiß nicht viel über "ip tuntap", aber können Sie mir sagen, wie ich auf das Internet zugreifen kann? Veth-b $ NNS 'und die MAC' von veth-b $ NNS 'muss für meinen ISP sichtbar sein. TorosFanny vor 8 Jahren 0
@TorosFanny Pls lesen meine Bearbeitung. MariusMatutiae vor 8 Jahren 0
Vielleicht habe ich meine Bedürfnisse nicht klar ausgedrückt. Ich muss eine NIC in einem Namespace für das Gateway meines ISP verfügbar machen. TorosFanny vor 8 Jahren 0
@TorosFanny Ich habe Ihnen gesagt, dass dies mit Netzwerk-Namespaces nicht möglich ist. Wenn Sie mir sagen, was Sie erreichen möchten (schließlich sind Sie ** bereits mit dem Internet verbunden, warum also eine andere Schnittstelle? Wozu dient das?), Kann ich Ihnen vielleicht helfen. MariusMatutiae vor 8 Jahren 0
@TorosFanny Ok, das geht mit `proxy-arp`. Sie sollten eine andere Frage stellen, damit andere davon profitieren können. MariusMatutiae vor 8 Jahren 0
Wir Kommilitonen müssen einen Kunden benutzen, um Zugang zum Internet zu erhalten. Der Client hat viele Einschränkungen. Sie benötigen Ihr Konto, um sich anzumelden, und Sie müssen die MAC-Adresse Ihrer Netzwerkkarte dem Gateway des Internetdienstanbieters offenlegen und anschließend eine IP-Adresse erhalten. Für jedes Konto ist die Bandbreite begrenzt. Ich möchte einen Server mit vielen Kontenprotokollen erstellen, damit wir unsere Bandbreite teilen können. Der Schlüsselschritt besteht darin, mehrere Clients in ihren entsprechenden Netzwerk-Namespaces auszuführen, sodass ich für jeden Namespace eine Link-Layer-Adresse verfügbar machen muss. Sie sagten, dass Veth nicht möglich ist, vielleicht könnte Macvlan helfen. TorosFanny vor 8 Jahren 0
@TorosFanny macvlan ist eine der Möglichkeiten, dies zu tun. Aber bitte stellen Sie eine neue Frage. MariusMatutiae vor 8 Jahren 0
Ja, ich schreibe. TorosFanny vor 8 Jahren 0
Bitte hilf mir. http://superuser.com/questions/1024723/how-to-add-virtual-nics-to-my-linux-pc-so-that-das-exponieren-die- ihre-mak-zu-Sekis TorosFanny vor 8 Jahren 0
-1
user606000
ip netns add mynetns ip netns exec mynetns ip link list ip netns exec mynetns ip link set dev lo up # ip netns exec mynetns ping 127.0.0.1 ip link add veth0 type veth peer name veth1 ip link set veth1 netns mynetns ip netns exec mynetns ifconfig veth1 10.1.1.1/24 up ifconfig veth0 10.1.1.2/24 up #ping 10.1.1.1 #ip netns exec mynetns ping 10.1.1.2  ip netns exec mynetns route ip netns exec mynetns iptables -L  ip netns exec mynetns bash 
Vielleicht ist es richtig, vielleicht funktioniert es, ich weiß es nicht. Ich habe gewählt, weil: (1) die Antwort ein roher Code-Block ist, ohne zu erklären, was er tut; (2) Es gibt keine Erklärung, wie und warum diese Lösung anders oder besser ist als die andere Antwort. Kamil Maciorowski vor 7 Jahren 0