Portál AbcLinuxu, 10. května 2025 16:46
net-bind -D wlan0 -exec {Program 192.168.1.1} net-bind -D wlan0:1 -exec {Program 192.168.1.2}Zkoušel jsem to namespacema, ale u wlan0 mi to nefunguje
# Add a new namespace called test_ns ip netns add test_ns # Set test to use eth0, after this point eth0 is not usable by programs # outside the namespace ip link set wlan0 netns test_nsVyhodí chybu
RTNETLINK answers: Invalid argument
Zkoušel jsem procesy spouštět na základě uživatelů, ale nevím jak to pak rozdělit. v IPtables je na to modul. Nenapadá někoho něco?
namespacama to jde.
nejdrive si ale musite udelat bridge:
brctl addbr br0 ip link set up wlan0 brctl addif br0 wlan0 ip link set wlan0 up ip addr add 10.0.0.1/24 dev br0 ip route add default via 10.0.0.138 dev br0 ip netns add test_ns ip link add veth0 type veth peer name veth1 ip link set veth1 netns test_ns ip netns exec test_ns ip link set veth1 up ip netns exec test_ns ip add add 10.0.0.2/24 dev veth1 ip netns exec test_ns ip route add default via 10.0.0.138 dev veth1 ip netns exec test_ns ping -c1 10.0.0.138
nezkousel jsem to presne takto, tak je tam mozna nejaky preklep.
ale ideove je to spravne.
marekbrctl addif br0 veth0marek
brctl addif br0 wlan0
Tohle může být problém. Mnohá wi-fi zařízení (z těžch běžných dost možná i většinu) lze z technických důvodů dát do bridge jen pokud jsou v AP režimu.
Mimochodem, když už na všechno ostatní používáte ip
, je zbytečné si to kazit použitím brctl
:
@@ -1,13 +1,13 @@ -brctl addbr br0 +ip link add br0 type bridge ip link set up wlan0 -brctl addif br0 wlan0 +ip link set wlan0 master br0 ip link set wlan0 up ip addr add 10.0.0.1/24 dev br0 ip route add default via 10.0.0.138 dev br0 ip netns add test_ns ip link add veth0 type veth peer name veth1 ip link set veth1 netns test_ns -brctl addif br0 veth0 +ip link set veth0 master br0 ip link set veth0 up ip netns exec test_ns ip link set veth1 up ip netns exec test_ns ip add add 10.0.0.2/24 dev veth1
$IPTABLES -t mangle -A OUTPUT -m owner --uid-owner 1003 -j MARK --set-mark 2 $IPTABLES -t mangle -A OUTPUT -m owner --uid-owner 1003 -j CONNMARK --save-marka potom pre ten mark das SNAT
$IPTABLES -t nat -A POSTROUTING -m mark --mark 2 -j SNAT --to-source 100.64.0.1
net-bind -D wlan0 -exec {Program 192.168.1.1} net-bind -D wlan0:1 -exec {Program 192.168.1.2}
Netuším, co má dělat net-bind
, ale základní problém bude v tom, že už přes 19 let ve skutečnosti žádné "wlan0:1
" neexistuje.
ip link set wlan0 netns test_ns
Tady je trochu technická záludnost, že jak se wi-fi zařízení skládá ze dvou logických částí ("phy" a "mac"), korespondence nemusí být 1:1 a vždy je potřeba mít jedno zařízení (phy) se vším, co k němu patří, ve stejném namespace. Takže je potřeba použít
iw phy ... set netns ...
Každé rozhraní je jen v jednom netns (jen lo
vypadá, že je ve všech, ale ve skutečnosti má každý své). Obvykle se to řeší pomocí veth párů (jeden veth se dá do netns, druhý se nechá v init).
Ale když tak o tom přemýšlím, možná je to vzácný případ, kdy by se hodilo použít ipvlan. Nebo macvlan by taky mohl fungovat. Prostě nad skutečným rozhraním udělat ipvlan (nebo macvlan), přesunout ho do toho netns, dát mu tu druhou adresu a nakonfigurovat routing.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.