
Ich versuche, ein C-Programm zu erstellen, das eine Tun-Geräteschnittstelle für die physische Schnittstelle meines PCs erstellt. Die Idee dahinter ist, dass, wenn ich Rohpakete auf mein Tunnelgerät schreibe, diese in meine tatsächliche physische Schnittstelle eingefügt werden. Meine Frage ist, wie ich das Tun-Gerät der tatsächlichen physischen Schnittstelle zuordne.
Beispielsweise hat mein eth1 die IP-Adresse 10.16.1.152. Wie kann ich ein Tun-Gerät erstellen, damit ich auf der eth1-Schnittstelle lesen/schreiben kann? Muss ich dieselbe oder eine andere IP-Adresse angeben? Ist Route die einzige Möglichkeit, Pakete auf das Tun-Gerät zu schreiben und eine Route zu erstellen, die ein Standard-Gateway des Tun-Geräts als PHY-Gerät hat.
Ich folgedieses Beispiel, aber das Konzept ist mir noch nicht klar.
Ich habe mit den folgenden Befehlen ein Tunnelgerät erstellt. Mein PC hat eine echte Ethernet-Schnittstelle. Diese Ethernet-Schnittstelle mit der IP-Adresse 10.16.1.152 ist mit einer Reihe von PCs und dann mit dem Gateway-Server verbunden, um auf das Internet zuzugreifen.
Ich versuche, ein C-Programm zu erstellen, das OSPF-Hello-Pakete auf die Schnittstelle schreibt.
Zu diesem Zweck erstelle ich ein Tunnelgerät, damit ich OSPF-Hello-Pakete darauf schreiben kann. Aber bevor ich das mache, überprüfe ich das Tunnelgerät. Hier ist mein Tunnelgerät 11.11.11.2/24 und ich stelle die Route auf 10.16.1.152 ein. Meines Wissens werden alle Pakete, die über die eigentliche Schnittstelle, also 10.16.1.152, empfangen oder gesendet werden, von dieser Tunnelgeräteschnittstelle empfangen, deren IP-Adresse 11.11.11.2 ist. Aber als ich einen Ping an 10.16.1.152 gesendet habe, waren die empfangenen RX/Tx-Pakete immer noch null. Ich denke also, mein Tunnel empfängt keine Pakete.
ip tuntap add mode tun dev tun0
ip addr add 11.11.11.2/24 dev tun0
ip link set dev tun0 up
ip route get 10.16.1.152
Übersehe ich hier ein Konzept? Wie kann ich das tun? Ich habe immer noch Probleme, meine Tunnelgerätekonzepte klar zu formulieren.
Antwort1
Sie können eine Schnittstelle nicht tun
dazu verwenden, „tatsächliche Pakete in eine vorhandene Schnittstelle einzufügen“. Eine tun
Schnittstelle ist immer eine neue Netzwerkschnittstelle, die sich von allen vorhandenen Schnittstellen unterscheidet.
Aber Sie könnenPaket-Socketsum Rohpakete in eine vorhandene Netzwerkschnittstelle zu schreiben (oder Rohpakete von ihr zu lesen). man 7 packet
Weitere Einzelheiten finden Sie unter. Sie umgehen dabei jedoch alle Protokollschichten, sodass Sie das korrekte Protokollverhalten selbst implementieren müssen. Wenn Sie also nicht wirklichWirklichwissen Sie, was Sie tun, dann tun Sie das nicht.
Sie haben nicht gesagt, was Sie eigentlich erreichen wollen, und Sie scheinen ein wenig verwirrt über die Konzepte zu sein, also könnte dies einXY-Problem, und es ist durchaus möglich, dass weder eine tun
Schnittstelle noch Paket-Sockets das sind, was Sie wirklich brauchen.