From mboxrd@z Thu Jan 1 00:00:00 1970 From: gtaylor at tnetconsulting.net (Grant Taylor) Date: Tue, 22 Sep 2020 19:54:52 -0600 Subject: [COFF] A little networking tool to reduce having to run emulators with privilege In-Reply-To: <20200922215309.a4ey9%steffen@sdaoden.eu> References: <23BB3E13-7306-4BB6-9566-DF4C61DE9799@gmail.com> <20200921213834.KaMCt%steffen@sdaoden.eu> <1dbc110c-8844-040d-a08d-07914094b47f@spamtrap.tnetconsulting.net> <20200922145441.zQkCA%steffen@sdaoden.eu> <0f0083d2-1fc6-87dd-3001-6fa7e3752c79@tnetconsulting.net> <20200922215309.a4ey9%steffen@sdaoden.eu> Message-ID: On 9/22/20 3:53 PM, Steffen Nurpmeso wrote: > Hello. Hi, > And that is fuzzy on my side, the best i have heard was on some > FreeBSD not too long ago, where the same problem exists. ..Yes. > This is exactly the message i remembered: Hum. I've added an LACP Link Aggregation Group as a member to a bridge multiple times. I would NEVER create an LACP Ling Aggregation Group between a wired and a wireless connection. I would expect that to NOT work. > Nothing. I only set the route. Hum.... > Ha. That could very well be because i was desperately trying to > create a bridge all the time, but it just was not working at all. > So i turned to proxy_arp "pseudo-bridging", with just having routes and > the TAP devices for the VMs, nothing more. A wild chaos universe thus. Were you trying to bridge things to a wireless NIC? > You know, to me this is just a programmatic problem, i just do > not understand. Why does it matter whether you have eth0 or wlp1s0? IMHO the name of the device doesn't matter. But the name does imply what type of device it is. eth0 is almost always wired (but there is no guarantee). After looking it up, wlp1s0 seems to imply Wi-Fi. Wi-Fi tends to imply other problems specific to Wi-Fi. > I can go into the internet with both, Yes. > why can i create a bridge on one but not the other? Because some Wi-Fi cards have problems related to multiple MAC addresses. Problems like they simply refuse to allow them. So the problem that it sounds like you're running into is that the Wi-Fi is refusing to do anything useful with the Ethernet frames that are being bridged to it. Aside: EBTables may be able to help resolve this problem. But that's another kettle of fish. > That does not make sense. Once you understand some of Wi-Fi's inherent limitations, it should also make sense to you. > Just do it? It (Wi-Fi) probably can't or won't do anything useful with an Ethernet frame that has a different source MAC address. Ergo, bridging with Wi-Fi typically is problematic or simply doesn't work. It's a limitation of Wi-Fi, not bridging technology. > It works when i inject a VETH pair, so may it be like this. /How/ are you injecting with a vEth pair? You say you aren't bridging. You indicate that you have used Proxy ARP in the past and that you aren't doing so now. So I'm not entirely sure what you're doing currently. I'd have to re-read and scrutinize emails in this thread again. > Having the bridge now makes things easy, i just make it the master > of anything which is plugged into it. Yes, so easy are things if > you never programmed a network hardware driver! What all are you plugging into it? Are you referring to plugging the single vEth in the network namespace? > I do not use a bridge on the host. This i cannot do. I trust that you believe what you are saying. I question the deep technical merits of it. Including using things like EBTables to NAT* the source MAC address to that of thee Wi-Fi card. *NAT typically applies to layer 3 IP addresses. But the same concept is being done to layer 3 Ethernet addresses. > But it makes things so easy now. You have seen the scripts, and on > the host i see > > #?0|kent:tmp$ ip rou > default via 192.168.0.1 dev wlp1s0 proto dhcp src 192.168.0.153 metric 306 > 10.0.0.0/8 dev v_n proto kernel scope link src 10.0.0.1 > 10.0.0.1 dev v_n scope link > 192.168.0.0/24 dev wlp1s0 proto dhcp scope link src 192.168.0.153 metric 306 > #?0|kent:tmp$ ip a > ... > 6: wlp1s0: ... > inet 192.168.0.153/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp1s0 > valid_lft 69766sec preferred_lft 58966sec > 8: v_n at if7: ... > inet 10.0.0.1/8 scope global v_n > valid_lft forever preferred_lft forever That's the first clear picture that I've had of the host side. (Perhaps I mis-read something before.) Do other things on your network have any access to what's running in the network namespace? Or is it only accessible by your host? > and in the namespace > > #?0|kent:~# ip netns exec v_ns ip rou > default via 10.0.0.1 dev v_br > 10.0.0.0/8 dev v_br proto kernel scope link src 10.1.0.1 > #?0|kent:~# ip netns exec v_ns ip a > ... > 6: v_br: .. > inet 10.1.0.1/8 brd 10.255.255.255 scope global v_br > valid_lft forever preferred_lft forever > inet6 fe80::dc81:96ff:fe0b:a229/64 scope link > valid_lft forever preferred_lft forever > 7: v_i at if8: .. > link/ether fe:7f:36:b0:04:97 brd ff:ff:ff:ff:ff:ff link-netnsid 0 > inet6 fe80::fc7f:36ff:feb0:497/64 scope link > valid_lft forever preferred_lft forever > > And i started a VM for you > > 8: vm_ulinux-010204: .. > link/ether ce:4a:41:5c:d6:61 brd ff:ff:ff:ff:ff:ff > inet6 fe80::cc4a:41ff:fe5c:d661/64 scope link > valid_lft forever preferred_lft forever > > No address no route setup, Why not add an IP address to the vm_ulinux-010204 interface? Much like you've added to the v_br interface above. > and in the machine > > $ cat default/net > TYPE=static > DEV=eth0 > ADDR=10.0.1.15 > MASK=8 > GW=10.0.0.1 > > Except for using a DHCP server in the namespace this is as short as it > can get. Of course if i would use that it would be even less work to > do when setting up a VM. And even more flexible and automatic. But, > you know, this is so overkill given that i use this only for testing, > and dhcpcd is now privilege-separated: I get the lack of motivation for DHCP inside of network namespaces. Especially when the IP address(es) used in the network namespace can be derived from the name of the network namespace. > #?0|kent:src$ pla|grep dhcpc > dhcpcd 509 1 S 0.0 1748 dhcpcd /sbin/dhcpcd -h kent -z wlp1s0 > root 510 509 S 0.0 2396 dhcpcd /sbin/dhcpcd -h kent -z wlp1s0 > dhcpcd 511 509 S 0.0 268 dhcpcd /sbin/dhcpcd -h kent -z wlp1s0 > dhcpcd 512 509 S 0.0 268 dhcpcd /sbin/dhcpcd -h kent -z wlp1s0 > dhcpcd 7619 510 S 0.0 376 dhcpcd /sbin/dhcpcd -h kent -z wlp1s0 Why do you have as many things running dhcpcd against the same interface? > And this twice all week long for in practice nothing? Ah, no. > And what if i move along, i have to have dhcpcd, or configure dnsmasq > to serve it for the namespace. And so i can use a simple hosts.txt > and have dnsmasq integrate it in its normal DNS service, this would > not be that easy if it would be dynamic, i had to look. Hence why I prefer to not use DHCP inside of network namespaces. ;-) I think we're in agreement about how addresses are assigned. Or at least that DHCP is an unnecessary complication. > Anyhow, no network setup at all on in the namespace, i have the > hosts.txt that i need anyway, and i configure the machine once i > install it. Done. > > It is terrible. Nothing HOWTO like, not "help the people to help > themselves", but everybody who understood a topic by himself is quick > in fooling others. This makes the FreeBSD handbook and the BSDs and > their manual portfolio in general outstanding. Ya. I think that a lot of documentation for things that are post TLDP's heyday are lacking considerably. I've had to dig through a lot of texts, scripts, watch a lot of videos, read man pages, and do lots of experimentation with network namespaces to get to where I am now. I'm always happy to share what I know. > Don't confuse me please, i am .. not a network expert. Surely you > could do use firewall stuff, but i do not. At least nothing special, > very restrictive indeed, but 10.0.0.0 is set free early, and other... I'm not trying to confuse you. I'm just pointing out that the host firewall /can/ mess with things in some situations. So, I advise you to not assume that it can't. > Ah yes, i have forgotten this line: > > if [ -n "$VM_NS" ]; then > ${iptables} -t nat -A POSTROUTING -o ${what} -j MASQUERADE > #echo 1 > /proc/sys/net/ipv4/conf/${what}/proxy_arp > fi > > Here $what is the device, wlp1s0 for example. True. Okay. That gives your network namespace access to the rest of the network (and probably the Internet). > Of course. The comment is a leftover. ;-) > Actually yes. In fact i have booted into 4.19 again today because > RTW88 is totally unusable here, at least after the first suspend/resume > and even though they added the rtw88_pci.disable_aspm=1 kernel command > line switch to work around power management problems. Power management can be a nightmare for networking (and other things). I now see that RTW88 is a Realtek /Wireless/ NIC. That makes a lot of (if not all of) the problems that you're describing make a lot more sense. > In fact the driver messed the hardware so much that Linux was no > longer capable to access it, even booting 4.19 and using R8822BE thus > did not do it. By sheer luck the friendly salesman gave me a 512 GB > NVME SSD for the price of a 256 GB last year, so i kept the maximally > minimized 30 GB Windows partition just for win (imagine that: 30 GB of > space .. wasted!), and booted into it, because of despair! Of course > i had forgotten my password (i just wanted to log into Windows to see > how it looks once i bought the laptop, my last Windows login before > that was Windows 95 B), but on the welcome screen you could select > the network, and once that dialog wanted the password of the network > (!) i rebooted into Linux 4.19 .. and was alive again. Sheer luck, > dammit, otherwise i would have been just dead. Terrible! It sounds like you partially wedged the wireless chip set. That's not unheard of. Sometimes a reboot will unwedge it. Sometimes it requires a full power off and back on. Sometimes you need to remove the battery. A few times you need another utility that will try to initialize it in a different way (Windows qualifies here). > This at least seems to be avoidable by using the above command > line switch. Today it could be accessed after reboot. Good. > No. I see that now. > But i do not? But you do. #?0|kent:~# ip netns exec v_ns ip a ... 6: v_br: .. inet 10.1.0.1/8 brd 10.255.255.255 scope global v_br valid_lft forever preferred_lft forever inet6 fe80::dc81:96ff:fe0b:a229/64 scope link valid_lft forever preferred_lft forever 7: v_i at if8: .. link/ether fe:7f:36:b0:04:97 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::fc7f:36ff:feb0:497/64 scope link valid_lft forever preferred_lft forever "ip netns exec v_ns ip a" runs "ip address" inside of the "v_ns" network namespace. "v_br" looks like a bridge. Your IP is bound to the v_br (bridge) interface. The "v_i" interface, which your previous email indicated was the vEth that is inside of the network namespace. So it /really/ looks to me like you /do/ have a bridge /inside/ of the network namespace and that you /are/ using it as part of your communications path. Please do an "ip link show" inside the network namespace. ip netns exec v_ns ip l I half way expect that the v_i interface will have a master of v_br. For giggles, why don't you add a "-d" between ip and link. ip netns exec v_ns ip -d l > Yes i understood that. I would need to assign addresses to the VMs > once the VM starts, whereas now i only do that inside the VM. Hm?. That overall concept would not change. But you would assign it to the v_i interface instead of the v_br interface. > There is only one network namespace here. One for all VMs. Ah. I had thought there were multiple network namespaces. One per VM / emulator. > You cannot create bridge devices on wireless interfaces, unless you > have a driver which does support that, or, i guess, you create your > own host access point, i dimly recall this could be a solution too. I don't know if the driver that balks at multiple MACs will support being an access point. Though I do wonder if it would be possible to leverage EBTables to play with MAC addresses to sooth the Wi-Fi NIC's heartburn at multiple MACs. }:-) > No no, only libgcrypt... That's all that /you/ personally are using it for. But I thought you indicated that something else was unhappy if there wasn't a (u)random device. > Yes. That i have to do some time. I'll look into cgroups some day. I've not had a need to do so yet. > Unfortunately true. The complexity of cgroups and the Linux kernel > as such is however very, very much intensed compared to a FreeBSD > jail. At least once jails appeared it often was nothing more than a > "if(process->jailed)" at the beginning of some kernel functions. *nod* I think that Linux still has some things to learn from BSD jails and Solaris zones. -- Grant. . . . unix || die -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4013 bytes Desc: S/MIME Cryptographic Signature URL: