Puncte:0

Forțați noul proces să utilizeze interfața de rețea specifică (folosind netns/spații de nume de rețea)

drapel cn

Am o serie de interfețe disponibile pe mașina Ubuntu 20.04. Printre alții enx0c5b8f279a64 și usb0 cu cea de mai târziu fiind folosită ca cea implicită. Vreau să mă asigur că un anumit proces început în terminal va folosi doar una dintre aceste interfețe (să zicem enx0c5b8f279a64 chiar dacă cealaltă interfață este implicită). Dacă acest proces este pornit și selectat enx0c5b8f279a64 interfața este oprită, nici măcar nu ar trebui să încerce să folosească orice altă interfață ca alternativă (ca și cum alte interfețe nici nu ar exista din perspectiva acestui proces).

cred ca ip netns este calea de urmat, dar am probleme la implementarea oricărei soluții de lucru. Am încercat https://superuser.com/a/750412 oricum primesc Destinatie finala negasita dacă încerc să pun ping 8.8.8.8 :(

Partea relevantă a ip a s ieșire:

 9: enx0c5b8f279a64: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_code state UP group default qlen 1000
     link/ether 12:12:12:12:12:12 brd ff:ff:ff:ff:ff:ff
     inet 192.168.7.100/24 ​​brd 192.168.7.255 scope global dynamic noprefixroute enx0c5b8f279a64
        valid_lft 84611sec preferred_lft 84611sec
     inet6 2323::2323:2323:2323:2323/64 scope link noprefixroute 
        valid_lft pentru totdeauna preferred_lft pentru totdeauna
 10: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state NECUNOSCUT grup implicit qlen 1000
     link/ether 34:34:34:34:34:34 brd ff:ff:ff:ff:ff:ff
     inet 192.168.42.**47**/24 brd 192.168.42.255 scope global dynamic noprefixroute usb0
        valid_lft 1858sec preferred_lft 1858sec
     inet6 4545:454:545:4545:454:5454:5454:5454/64 domeniu global temporar depreciat dinamic 
        valid_lft 2461sec preferred_lft 0sec
     inet6 5656:565:656:5656:5656:5656:5656:5656/64 domeniu global depreciat dinamic mngtmpaddr noprefixroute 
        valid_lft 2461sec preferred_lft 0sec
     inet6 6767::6767:6767:6767:6767/64 scope link noprefixroute 
        valid_lft pentru totdeauna preferred_lft pentru totdeauna

și tabelul de rute:

 traseul -n
 Tabelul de rutare IP kernel
 Destination Gateway Genmask Flags Metric Ref Utilizare Iface
 0.0.0.0 192.168.7.1 0.0.0.0 UG 100 0 0 enx0c5b8f279a64
 0.0.0.0 192.168.42.129 0.0.0.0 UG 101 0 0 usb0
 192.168.7.0 0.0.0.0 255.255.255.0 U 100 0 0 enx0c5b8f279a64
 192.168.42.0 0.0.0.0 255.255.255.0 U 101 0 0 usb0

Până acum, toate soluțiile pe care le-am încercat au început într-un mod similar:

# creați spațiu de nume
sudo ip netns adauga nspace0
# creați link
sudo ip link add veth0 tip veth peer name veth1
# muta linkul
sudo ip link set veth1 netns nspace0

# FĂ CEVA MAGIE 
# (niciuna dintre soluțiile pe care am încercat să le adaptez aici nu a funcționat pentru mine până acum).
...

# rulați procesul în spațiul de nume (aici folosesc curl ca exemplu) 
sudo ip netns exec nspace0 curl ifconfig.me/ip

Dar problema este MAGIE parte. Am văzut o serie de abordări cu poduri și alte soluții de redirecționare ip. Din păcate, niciuna dintre acestea nu a funcționat pentru mine până acum și nu sunt atât de versat în rețele pentru a putea diagnostica și remedia.

Puncte:1
drapel cn

Se pare că funcționează cu următorul script. O caracteristică suplimentară care nu era prezentă în întrebarea mea inițială este cum să păstrez interfața atât în ​​spațiile de nume principale, cât și în cele noi (dar mă voi ocupa de asta mai târziu). Următoarea este o soluție destul de descriptivă bazată pe informațiile furnizate în: Aici, Aici, Aici, Aici, Aici și Aici.

# Salvați setările implicite în fișiere pentru o referință la îndemână
adresă ip > log_000.ip_addr.txt
link ip > log_000.ip_link.txt
ruta ip > log_000.ip_route.txt
ruta -n > log_000.route_n.txt

# Interfețe
INTERFACE_0="usb0"
INTERFACE_1="enx0c5b8f279a64"

# Colectați informații despre configurația curentă
PUBL_IP=$(curl --silent ifconfig.me/ip)
INTERFACE_0_PUBL_IP=$(curl --silent --interfață ${INTERFACE_0} ifconfig.me/ip)
INTERFACE_1_PUBL_IP=$(curl --silent --interfață ${INTERFACE_1} ifconfig.me/ip)

INTERFACE_0_PRIV_IP=$(ip a show ${INTERFACE_0} | awk '/inet / {print $2}')
INTERFACE_1_PRIV_IP=$(ip a show ${INTERFACE_1} | awk '/inet / {print $2}')

INTERFACE_0_GATE=$(ip ruta arată dev ${INTERFACE_0} | awk '/default via/ {print $3}')
INTERFACE_1_GATE=$(ip ruta arată dev ${INTERFACE_1} | awk '/default via/ {print $3}')

echo "" > log_001.IPs.txt
echo „PUBL_IP: ${PUBL_IP}” >> log_001.IPs.txt
ecou "============================================" >> log_001 .IPs.txt
echo „INTERFACE_0_PUBL_IP: ${INTERFACE_0_PUBL_IP}” >> log_001.IPs.txt
echo „INTERFACE_0_PRIV_IP: ${INTERFACE_0_PRIV_IP}” >> log_001.IPs.txt
echo „INTERFACE_0_GATE: ${INTERFACE_0_GATE}” >> log_001.IPs.txt
ecou "============================================" >> log_001 .IPs.txt
echo „INTERFACE_1_PUBL_IP: ${INTERFACE_1_PUBL_IP}” >> log_001.IPs.txt
echo „INTERFACE_1_PRIV_IP: ${INTERFACE_1_PRIV_IP}” >> log_001.IPs.txt
echo „INTERFACE_1_GATE: ${INTERFACE_1_GATE}” >> log_001.IPs.txt
cat log_001.IPs.txt

NAMESPACE_1="ns1"

# SETUP: Creați un nou spațiu de nume.
sudo ip netns adaugă ${NAMESPACE_1}

# VERIFICARE: Verificați dacă numele a fost creat.
sudo ip netns list

# VERIFICARE: Listează interfețele din spațiul de nume principal și cel nou
afișează adresa ip
sudo ip netns exec ${NAMESPACE_1} ip addr show

# SETUP: Conectați (mutați) interfața la spațiul de nume.
# NB această interfață nu va fi disponibilă în spațiul de nume principal (implicit).
sudo ip link set ${INTERFACE_1} netns ${NAMESPACE_1}

# VERIFICARE: verificați dacă interfața a fost mutată din spațiul de nume principal în noul spațiu de nume.
afișează adresa ip
sudo ip netns exec ${NAMESPACE_1} ip addr show

# SETUP: Setați adresa IP a interfeței în noul spațiu de nume și afișați-o.
# TODO: Verificați dacă adresa trebuie să fie așa cum era în spațiul de nume principal.
sudo ip netns exec ${NAMESPACE_1} ifconfig ${INTERFACE_1} ${INTERFACE_1_PRIV_IP} în sus

# SETUP: Afișați interfața de loopback (deoarece poate fi necesară proceselor rulate în noul spațiu de nume).
sudo ip netns exec ${NAMESPACE_1} ifconfig lo 127.0.0.1/8 up

# VERIFICARE: Listați interfețele (loopback și INTERFACE_1) în noul spațiu de nume
sudo ip netns exec ${NAMESPACE_1} ip addr show

# VERIFICARE: Verificați tabelul de rute.
sudo ip netns exec ${NAMESPACE_1} ruta -n

# SETUP: Adăugați gateway implicit la ruta în noul spațiu de nume.
sudo ip netns exec ${NAMESPACE_1} route add default gw 192.168.7.1

# VERIFICARE: Verificați din nou tabelul de rute.
sudo ip netns exec ${NAMESPACE_1} ruta -n

# TERMINAT: Folosiți un nume nou.
sudo ip netns exec ${NAMESPACE_1} ping 8.8.8.8
sudo ip netns exec ${NAMESPACE_1} traceroute 8.8.8.8

# SETARE: Remediați DNS
sudo mkdir -pv /etc/netns/${NAMESPACE_1}
sudo echo "server de nume 8.8.8.8" > /etc/netns/${NAMESPACE_1}/resolv.conf


sudo ip netns exec ${NAMESPACE_1} curl ifconfig.me/ip
sudo ip netns exec ${NAMESPACE_1} curl --silent ifconfig.me/ip

# EXTRA: Anulați modificările (reveniți la starea inițială a setărilor IP)
sudo ip netns del ${NAMESPACE_1}

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.