Trebuie să fac o configurare ca aceasta (cu Linux):
- Vreau să am un spațiu de nume de rețea (să spunem
weth_ns) cu o interfață de rețea conectată la internet (weth0)
- vreau sa am o diferit interfață de rețea ca rută implicită în spațiul de nume gazdă (
eth0)
- Vreau să pot folosi cumva lucruri precum
răsuci, cu niste un fel de interfață, pentru a utiliza în mod transparent rețeaua interior acel spațiu de nume pentru a vă conecta la internet.
Deci, așa.

Se pare că nu-l pot face să funcționeze. Ce am facut pana acum:
ip netns adaugă weth_ns
ip link set weth0 netns weth_ns
ip netns exec weth_ns ip link set dev weth0 up
ip netns exec weth_ns ip a # pentru a vedea lista pentru a vă asigura că este acolo
ip netns exec weth_ns dhclient weth0
ip netns exec weth_ns curl website.com # funcționează conform așteptărilor
Aceasta setează spațiul de nume și pune interfața acolo. Asta face ca curl să funcționeze în interiorul spațiului de nume. Acum vreau să folosesc cumva conexiunea de spațiu de nume izolată de la gazdă.
Ceea ce am încercat să fac a fost să configurez un bridge și să configurez iptables în interiorul spațiului de nume. Deci ce alerg:
link ip add veth0_left tip veth peer veth0_right
ip link adăugați bridge0 tip bridge
linkul ip setați bridge0
ip addr add 10.9.0.0/24 dev bridge0 # 10.9.0.0 este adresa cu care am venit
Legătura ip setată veth0_left master bridge0 sus
set link ip dev veth0_right netns weth_ns
ip netns exec weth_ns ip link set dev veth0_right up
ip netns exec mobile_ns ip addr add 10.9.0.1/24 dev veth0_right
Acest lucru adaugă un pont; Acum pot face ping cu succes din spațiul de nume în spațiul de nume. Deci podul în sine funcționează.
ping 10.9.0.1 # funcționează
ip netns exec mobile_ns ping 10.9.0.0 # funcționează
Și acum trebuie să configurez iptables pentru a utiliza conexiunea în interiorul spațiului de nume. Bănuiesc că aici fac un fel de greșeală. Iată ce am adunat din diverse surse online:
ip netns exec mobile_ns bash
# toate următoarele în interiorul spațiului de nume bash:
iptables -t nat -A POSTROUTING -s 10.9.0.0/255.255.255.0 -o weth0 -j MASQUERADE
iptables -A FORWARD -i weth0 -o veth0_right -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o weth0 -i veth0_right -m state --state ESTABLISHED,RELATED -j ACCEPT
(toate rețelele implicate au /proc/sys/net/ipv4/conf/<network>/forwarding setat la 1. Atât din interiorul cât și din exteriorul spațiului de nume.)
Și... nu funcționează. Rețeaua mea ar trebui să arate așa acum; dar nu mă pot conecta prin curl. Cu oricare veth0_left sau pod0 interfata retea.

Trebuie să fac ceva greșit undeva.
Editați | ×:
Pentru a specifica ce înseamnă „nu funcționează”.
curl --interfață bridge0 8.8.8.8
curl: (7) Nu s-a putut conecta la portul 8.8.8.8 80: Nicio rută către gazdă
curl --interface veth0_left 8.8.8.8
curl: (7) Nu s-a putut conecta la portul 8.8.8.8 80: Nicio rută către gazdă
Când încerc să văd tcpdump, în interiorul spațiului de nume, văd care are Cereri ARP, dar numai pe interfața bridge. Se pare că nu „intră” niciodată în interfața weth0.