Remix.run Logo
▲ johen8 3 days ago

Actually yesterday I was at a client doing a demonstration. I am a software developer, but not an IT/network guy, so I just knew to connect to their network, look at ipconfig and tell them the IP of my computer so they could connect to my machine to test the software. I just look at it and said "i'm at zero point fifty four" (it was 192.168.0.54). How would this look in IPv6? (It's a genuine question, because from what I see it would be something like "i'm at f e seven four colon colon colon zero one a", it honestly adds friction.

▲wolrah 3 days ago | parent | next [-]

mDNS autodiscovery by name would be my preferred solution, which should work by default on major OSes as long as the network operator or device administrator hasn't gone out of their way to break it. <yourhostname>.local

Like I said in my previous post, for the most part if you need to actually communicate the raw IP that probably means something has gone wrong and you're now troubleshooting with someone who should have access to a higher level view of the network where "the one ending in 3 charlie echo 5" should be more than sufficient just like it would be if you were communicating a MAC address while troubleshooting DHCPv4 issues.

In the 12 years I've had a dual-stack network I've never had to communicate a full IPv6 address verbally, but if I did I'd pretty much do it the same way I would an IPv4 address. One group at a time, with a pause implying the separator. If there was one or more zero subnets involved that could be shortened with double-colon I'd say that.

For example the record I just got back for Google of 2607:f8b0:4023:141b::71 I'd read off as:

two six zero seven (or maybe twenty-six oh seven)

foxtrot eight bravo zero

four zero two three (or maybe forty twenty-three)

one four one bravo

double colon

seven one

edit: HN makes it way harder than it should be to have multiple lines.

▲simpleguitar 3 days ago | parent | prev | next [-]

If you have a Mac or Windows laptop, since they configure mDNS by default, you could say <my-machine>.local. The client will do a mDNS query and get your IPv4 or IPv6 address and connect.

That was the whole point of mDNS.

This will work even on a pure ipv6 network (with no hosts having ipv4 addresses).

▲mahboi 3 days ago | parent | next [-]

I have a completely default single router setup at home. I know .50 is my desktop and .1 is my router. How do I reach that via mDNS instead? Pretty sure this is broken.

  ~ $ arp -a
  ? (192.168.50.1) at e8:9c:25:52:83:10 on en0 ifscope [ethernet]
  ? (192.168.50.9) at 64:9a:63:eb:ed:f1 on en0 ifscope [ethernet]
  ? (192.168.50.50) at 14:98:77:70:17:a7 on en0 ifscope [ethernet]
▲dcrazy 3 days ago | parent | next [-]

On a Mac, run `dns-sd -B _ssh._tcp` to find all machines advertising SSH on your local network. From there, you can either use the advertised `.local` hostname directly, or you can pass the advertised friendly name to `dns-sd -G v4` to resolve it to an IPv4 address.

AFAIK you must always specify a service like `_ssh._tcp` or `_http._tcp`; you can’t ask dns-sd to just dump all the advertised mDNS services on your network. That might be possible with the underlying `nw_browser_t` APIs, though.

▲mahboi 3 days ago | parent | next [-]

Thanks, so this one works for my Mac (.50) in particular but not my RPi on the same network with an SSH server, because turns out it doesn't advertise that by default.

"you can’t ask dns-sd to just dump all the advertised mDNS services on your network": I ran into this too. So besides the defaults and maybe network itself standing in the way, the tooling around mDNS is user-unfriendly.

▲justsomehnguy 2 days ago | parent [-]

Yes, thanks, I do not want even any SSH server to be advertised on mDNS.

▲mahboi 2 days ago | parent [-]

Me neither really, I just want to reliably know the hostname<->ipaddr mapping on a network.

▲justsomehnguy 2 days ago | parent [-]

Run a classic DNS then.

Or hosts.

You are arguing what mDNS doesn't work the exact way you want therefore mDNS is not working for everyone else.

▲mahboi 2 days ago | parent [-]

mDNS doesn't work for the average user. They're also not going to set up regular DNS unless they're trying to cope with IPv6. They memorize IP addresses as needed. It's not just me.

There must be like 3 end users who actually use mDNS knowingly, which is why the tooling feels like an unhappy path. Like there's no way to list all hosts, even though the OS presumably knows that somewhere. Supposedly this is in the spec. The best you can do is list hosts that advertise services.

▲wolrah 2 days ago | parent [-]

> mDNS doesn't work for the average user.

What did mDNS do to hurt you? You are spouting blatant wrongness in this thread.

mDNS is mostly FOR the average user, and it works great for them. AirPlay, Google Cast, Miracast, all mDNS. Google Home, Apple HomeKit, Matter, all mDNS. AirPrint/IPP/Mopria printers, all mDNS. Windows still uses a lot of its own proprietary autodiscovery but even there Microsoft has prioritized mDNS over the old NBT stuff.

> They memorize IP addresses as needed.

No, normal people use names, mostly delivered these days over mDNS. There are millions of consumer-targeted appliances and entry-level DIY projects intended for people who need a picture to not put the SD card in the Raspberry Pi where the instructions, after powering it up, say to open up a browser and navigate to <appliancename>.local (or more often with commercial devices, open the app which will be listening for that specific appliance's service advertisement.

> There must be like 3 end users who actually use mDNS knowingly, which is why the tooling feels like an unhappy path.

You are right on this, most users don't use it knowingly, because it just works and they don't have to know anything about what's been built on top of it.

> Like there's no way to list all hosts, even though the OS presumably knows that somewhere.

No, the OS does not know all hosts, it only knows the hosts that have advertised or probed for conflicting names while it's been attached to the network. If you connect your device to the network after I've connected mine, as long as there's not a name conflict your device has no idea mine exists unless it's advertising services. Service advertisements are cached, but hostnames are not because for obvious reasons you generally aren't going to be accessing most of the hosts on a given network ever. When you need to access whatever.local your device emits a mDNS query looking for A or AAAA records the same as it would for normal DNS, and caches the result based on TTL the same way as it would for a normal DNS record.

> The best you can do is list hosts that advertise services.

You're saying this like there's some other solution which lets you list every host in the network even if it's not advertising services, which...there isn't.

▲mahboi 11 hours ago | parent | next [-]

The question was if someone wants to connect to a device manually, do they use mDNS or IP. But anyway, you gave a list of some of the flakiest services. I've used Macs since the early 2000s, there's no bonjour without some pain. Just had a meeting today where they wanted to AirPlay to the conference room TV and gave up. It's a FAQ how to forcibly AirPlay to a given ip instead of relying on discovery. Many other commercial IoT devices use ad hoc wifi networks, BT, etc for initial setup.

You mentioned newbs using RPis. https://www.raspberrypi.com/documentation/computers/remote-a... "Most methods of connecting to your Raspberry Pi from another machine require you to know the local IP address of your Raspberry Pi" and then, as the main suggested approach, it has you write down the IP displayed onscreen. OctoPrint does suggest mDNS, but with the caveat "if your computer supports bonjour," otherwise says to use the IP.

> You're saying this like there's some other solution which lets you list every host in the network even if it's not advertising services, which...there isn't.

I mean yeah, that's part of the problem. You can blame the devices for having bad defaults, but all of them use ipv4 properly. mDNS is more moving parts.

▲ 2 days ago | parent | prev | next [-]
[deleted]
▲justsomehnguy a day ago | parent | prev [-]

> No, normal people use names, mostly delivered these days over mDNS

You said what I would had said if I had the patience to do so, with only one caveat: most people don't even use the names because most of the time they do the thing, it runs the discovery and show up the devices which did respond.

Sure, there are some people who use mDNS names to SSH to the some machine. Like a dozen on the whole planet.

▲wolrah 3 days ago | parent | prev [-]

This is to discover services, which you really shouldn't need to do by hand outside of troubleshooting, your apps should be doing it themselves.

For address discovery which is what we're really talking about here it's just "<hostname>.local"

▲dcrazy 3 days ago | parent [-]

I was answering the question of “how do I discover another host’s mDNS hostname?” It turns out that is a per-service question.

▲wolrah 3 days ago | parent [-]

> I was answering the question of “how do I discover another host’s mDNS hostname?” It turns out that is a per-service question.

No, it's not. That is a service address, not the host's hostname.

The host's hostname is whatever the computer is named, which if you are in a position where you're wanting to give someone else its IPv4 address or access your own thing via its IPv4 address you definitely can also know it's hostname because it's either shown in the same parts of the GUI or one command away. On a lot of CLI systems it's literally in the prompt.

Either way it's not advertised unless that host is configured to advertise itself, you have to query for it and the host will then respond.

▲mahboi 3 days ago | parent [-]

Not every host lets you SSH into it to run commands. The mDNS hostname is not always the same as your system hostname since it can change due to conflicts. Some Linux distros don't even have a built-in util to show your own mDNS name.

▲wolrah 2 days ago | parent [-]

> Not every host lets you SSH into it to run commands.

Not sure how this is relevant. The context we're talking about here is someone wanting to communicate to another person how to connect to their laptop. We can assume that this person has sufficient access to the device to get this information.

You're not trying to work backwards from an unknown device here, if you're doing that you presumably have the ability to copy/paste the full address from whatever tool you used to identify the device's existence on the network.

> The mDNS hostname is not always the same as your system hostname since it can change due to conflicts.

And it changes in predictable ways, with the mainstream desktop OSes presenting a notification to the user in case of conflicts. If yours doesn't, consider that a flaw in your OS.

Also, if this is a real issue you run in to more than once in a blue moon it's probably worth picking a more unique name.

> Some Linux distros don't even have a built-in util to show your own mDNS name.

systemctl status avahi-daemon

should do the trick on any mainstream Linux distro, and if you're one of the anti-systemd crowd you presumably know your equivalent.

▲mahboi 11 hours ago | parent | next [-]

Ok, guess it's on me for giving an example where the host is a PC where I have access, but it very well might not be.

▲ 2 days ago | parent | prev [-]
[deleted]
▲wolrah 3 days ago | parent | prev [-]

<hostname>.local

Here's me pinging my laptop (macOS 27) from my file server (Ubuntu 24.04)

  ~ ping persephone.local
 PING persephone.local (fd82:74ca:1cef:385a:1897:2e4b:a726:18b6%3) 56 data bytes
 64 bytes from fd82:74ca:1cef:385a:1897:2e4b:a726:18b6: icmp_seq=1 ttl=64 time=0.496 ms
 64 bytes from fd82:74ca:1cef:385a:1897:2e4b:a726:18b6: icmp_seq=2 ttl=64 time=0.515 ms
 ^C
 --- persephone.local ping statistics ---
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
 rtt min/avg/max/mdev = 0.496/0.505/0.515/0.009 ms
▲mahboi 3 days ago | parent [-]

Only if you know the name already and no two hosts took the same name, assuming it works at all. Shouldn't those question marks be the hostnames on arp -a? On some networks it shows them, on others it doesn't.

▲wolrah 3 days ago | parent [-]

> Only if you know the name already and no two hosts took the same name, assuming it works at all.

We're talking about somebody who knows how to get the IPv4 address of their computer, the hostname is available in basically the same exact place on every single system, and easier to remember, and remains the same on every network unless there's a conflict.

It works as long as the network operator of system admin hasn't gone out of their way to break it.

> Shouldn't those question marks be the hostnames on arp -a? On some networks it shows them, on others it doesn't.

Those question marks will fill in if there is a reverse dns entry in the local DNS server, which is set in IPv4 networks based on the device putting its hostname in the DHCP request. Most consumer combo gateway devices will do this by default as does Windows DHCP, but a lot of business firewall devices don't do it at all or don't do it by default.

Either way, that's not relevant to IPv6, mDNS is the way.

▲mahboi 3 days ago | parent [-]

"Most consumer combo gateway devices will do this by default as does Windows DHCP, but a lot of business firewall devices don't do it at all or don't do it by default.": Guess that explains it. I have a home router, but maybe its defaults are more business-like.

I'm pretty frequently in a scenario where I know local v4 addrs but not hostnames, usually on a network that's not my own. But even on my own network cause there's no simple way to discover the names, so not everything is a Linux box I can SSH into to ask the hostname. I'd use mDNS if I could reliably type something in to show all the DNS entries on the LAN, never having to diagnose any issues with this.

▲lxgr 3 days ago | parent | prev [-]

I haven’t used Linux in over 10 years on a laptop, but even back then this was very well supported there as well. `ssh foobar.local` just worked, for example.

▲WorldMaker 3 days ago | parent | prev [-]

Just as LAN addresses (link local) are usually 192.168.$x.$y and you are just passing $x.$y, with IPv6 they are usually `fe80::$z` and in theory you could just pass $z and the person on the other end can assume `fe80::`. Because of how double colon works $z could be just 54 in a similar situation (especially if link local addresses are statically assigned like most workplaces try to statically assign IPv4 addresses).

Same with ULA addresses like 10.$x.$y.$z for private networks. Most of those you can assume `fd$x::$z` and just need to pass whatever is on the other side of the double colons. (Where $x is optional and likely network-wide.)

▲mahboi 3 days ago | parent [-]

They're long though. Just checked and my desktop has fe80::1068:f88b:8b1b:4e45 for en0. They can't be short because of possible collisions, unless you're using DHCP or manually allocating static ones, and DHCP6 isn't broadly supported on hosts or routers.

▲WorldMaker 3 days ago | parent [-]

Sure, most systems default to SLAAC which creates random long addresses. You can manually allocate them just fine and short addresses aren't going to cause collisions (and if they did, SLAAC handles it). Some of the networking people most (ab)using 192.168.x.y heavily are manually allocating them.

DHCP6 is pretty well supported on a lot of Enterprise routers, so the fd:: ULA space, which is what DHCP6 is most good for, has no required reason to be long addresses (outside of silly things like this link's mentioned Tailscale fingerprinting/advertising IP).