Puncte:2

Ce înseamnă ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1?

drapel jp

Am găsit următorul set de comenzi pentru a deschide un dispozitiv tun pe Linux care transmite lucruri pe internet. Cu toate acestea, pachetele nu sunt transmise înapoi către dispozitivul tun

ip tuntap add dev tun1 mode tun user `id -un`
linkul ip setați dev tun1 în sus
adresă ip adăugați dev tun1 local 192.168.69.0 la distanță 192.168.69.1
iptables -t filter -I FORWARD -i tun1 -o eth0 -j ACCEPT
iptables -t filter -I FORWARD -m stare --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

ce face adresă ip adăugați dev tun1 local 192.168.69.0 la distanță 192.168.69.1 Rău? Ce este local și la distanta? Ce ar putea lipsi?

Clientul meu trimite un SYN, serverul răspunde cu SYN+ACK, dar acest SYN+ACK nu este transmis înapoi la dispozitivul tun.

drapel us
Care este adevăratul lucru pe care încerci să-l faci? Care este topologia dvs. de rețea?
Nikita Kipriyanov avatar
drapel za
Dispozitivul Tun nu este un „tunnel de rețea”. Este *interfața virtuală* a nivelului OSI 3, așa că puteți atașa un program la acesta și toate pachetele pe care le puneți în tun vor fi alimentate în acel program și, de asemenea, programul poate alimenta pachete în sistem, astfel încât acestea să apară ca ieșirea din interfața tun. Din nou, acest lucru nu are nimic de-a face cu tunelul în sine. Este doar NIC-ul virtual. Da, ați putea construi o soluție de tunel pe baza acestui lucru, dar va fi ineficientă în comparație cu, de exemplu, tunelul ipip sau gre.
Nikita Kipriyanov avatar
drapel za
@A.B. `tinc` folosește și asta. Dar atunci când utilizați oricare dintre acestea, nu trebuie să executați niciodată comenzi de acest fel pe care le vedem în această întrebare.
drapel jp
@NikitaKipriyanov este doar în scopuri de testare. Ce este greșit în comenzile mele? Aș dori să construiesc un tunel simplu, astfel încât să pot testa cu o stivă tcp/ip de spațiu de utilizator (smoltcp). Trimiteți pachete în lume și primiți-le în tun ca și cum ar fi un VPN, la fel cum face OpenVPN
Nikita Kipriyanov avatar
drapel za
@A.B. din nou, utilizarea lui `tun` nu înseamnă că va exista OpenVPN. De fapt, acest tip a declarat clar că nu intenționează să folosească OpenVPN, ci smoltcp, care este o bibliotecă Rust, o stivă de rețea de software. Nu aș numi acest monstru „un tunel”.
A.B avatar
drapel cl
A.B
@NikitaKipriyanov Oh, nu am citit că era smoltcp. Greșeala mea
Nikita Kipriyanov avatar
drapel za
@GuerlandoOCs nu este nimic în neregulă cu comenzile tale; Sunt obișnuit să văd oameni care încearcă să programeze chestii de rețea cunosc deja elementele de bază ale rețelei, așa că am vrut să fiu sigur că știi ce faci.
Puncte:2
drapel za

În termeni simpli, puteți distinge între două tipuri de legături (aceasta este o simplificare, dar suficientă pentru această întrebare):

  • legături peer-to-peer, unde fiecare parte a unei legături este un singur peer.Fiecare peer știe că există doar un alt peer în spatele legăturii și toți ceilalți sunt direcționați. Un exemplu este o legătură serială (prin modemul PSTN)
  • link-uri de acces multiple, unde poate exista mai mult de un alt peer în spatele link-ului. Există o multitudine de exemple, cum ar fi Ethernet, WiFi și unele învechite

Când configurați adresa la o interfață în forma (obișnuită) de „adresă și mască de rețea” prin adresa ip adăugați x.y.z.t/n dev eth, în esență faci următoarele lucruri:

  • spuneți nucleului că ar trebui să recunoască un x.y.z.t la fel de propria adresa, deci adaugă o rută locală de domeniu în local tabel de rutare
  • spuneți nucleului care se adresează ca x.y.z.00...0x.y.z.11...1 sunt direct accesibile în spatele link-ului, așa că adaugă o rută a link-ului scope prin această interfață în principal tabel de rutare (/n specifică de fapt câți biți de adresă sunt comuni pentru toate gazdele din acea rețea)
  • tell kernel x.y.z.11...1 este adresa de „difuzare” a legăturii, deci adaugă o rută de difuzare în local tabel (și va lua în considerare pachetele destinate acelei adrese, în plus față de adresa „nod personal”. x.y.z.t)

Dar nu există nicio „rețea” în spatele legăturii peer-to-peer, nu există nimeni la care să transmită, poate exista doar un alt peer. Când adăugați adresa la linkul din formular adresa ip adăugați local x.y.z.t remote b.c.d.e dev tun, în esență faci următoarele:

  • spuneți nucleului că ar trebui să recunoască an x.y.z.t la fel de propria adresa, deci adaugă o rută locală de domeniu în local tabel de rutare
  • spuneți nucleului adresa b.c.d.e este direct accesibil prin acel link, așa că adaugă o rută la adresa respectivă prin această interfață la principal tabel de rutare.

De exemplu. comanda adresa ip adăugați local 10.0.1.0 la distanță 10.0.1.1 dev tun0 creează pur și simplu următoarele rute:

  • local 10.0.1.0 dev tun0 proto kernel scope host src 10.0.1.0 (în local masa)
  • 10.0.1.1 dev tun0 proto kernel scope link src 10.0.1.0 (în principal masa)

Verificați tabelele de rutare înainte și după emiterea comenzilor „adăugați adresa IP” în ambele cazuri.

Te remarc Mai adăugați configurație de stil peer-to-peer la interfața cu acces multiplu și invers; puteți chiar să adăugați o singură adresă „/32” și apoi să adăugați rutare „prin interfață” manual, iar asta va funcționa exact ca și cum ați seta o mască de rețea semnificativă sau o adresă de la distanță în comandă. Puteți chiar să adăugați mai multe tipuri de configurații la interfața unică și toate ar putea funcționa simultan! Așa că nu luați toți acești parametri prea în serios, gândiți-vă la ei ca la modalitatea de a adăuga automat rutele necesare atunci când configurați o adresă.

drapel jp
deci, dacă am înțeles corect, `ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1` face adresa mea `192.168.69.0`, deci fiecare pachet cu această adresă ca destinație va ajunge la `tun1` și va face, de asemenea, `192.168. 69.1` accesibil prin `tun1`. Deci, dacă vreau să accesez orice site web, trebuie să fac `ip addr add dev tun1 local 192.168.69.0 remote 0.0.0.0`?
Nikita Kipriyanov avatar
drapel za
Nu, ai greșit ideea de competență. Se pare că nici măcar nu înțelegi ce întrebi la întrebarea ta, pentru că am răspuns exact la ea. Amintește-mi, de ce ai nevoie de interfața `tun`? Cum corespunde acest comentariu? Dacă doriți să puneți întrebări suplimentare fără legătură, vă rugăm să le puneți singuri ca întrebări. De asemenea, ServerFault nu este locul corect pentru a pune întrebări ca acesta. SuperUtilizator poate. Dacă dezvoltați software, StackOverflow. Dacă întrebarea dvs. este specifică pentru Linux, accesați unix.stackechange.com. Aici rezolvăm problemele de afaceri.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.