iPhone 16e USB tethering on pfSense CE 2.8.1: ue0 appears, but no DHCP / ARP reply
-
iPhone 16e USB tethering on pfSense CE 2.8.1: ue0 appears but no DHCP / connectivity
I’m trying to use an iPhone 16e (latest iOS) as a USB WAN connection on pfSense CE 2.8.1 (FreeBSD 15 based). The iPhone is detected correctly and usbconfig shows that only Configuration 3 exposes AppleUSBEthernet. After running usbconfig -d ugenX.Y set_config 3, the iPhone immediately shows the “Trust This Computer?” prompt. ue0 is then created and can be assigned as OPT3. The interface comes up and shows UP/RUNNING. if_ipheth.ko was manually copied to /boot/kernel/; kldload if_ipheth now reports module already loaded or in kernel.
However, DHCP never succeeds. The DHCP log repeatedly shows DHCPDISCOVER on ue0 followed by No DHCPOFFERS received. I also tried bypassing DHCP completely by configuring ue0 statically as 172.20.10.2/28 with gateway 172.20.10.1 (the network that the iPhone gives to a MacBook). Even then, ping 172.20.10.1 fails with sendto: Host is down, and arp -an shows 172.20.10.1 as incomplete on ue0, suggesting ARP requests are sent but never answered.
To verify the phone itself is working, I connected the same iPhone with the same cable directly to a MacBook. The Mac immediately receives 172.20.10.2/28, gateway 172.20.10.1, and Internet access works normally. So the iPhone, cable, hotspot, and carrier connection all appear to be fine.
Has anyone successfully used a recent iPhone (iPhone 15/16 generation, current iOS) with pfSense 2.8.1? Is there anything else required beyond if_ipheth and forcing Configuration 3? Has anyone seen a situation where ue0 is created successfully but the iPhone never responds to DHCP or even ARP? Any ideas would be appreciated.
-
Does a packet capture on OPT3 show any traffic whatsoever originating from the iPhone?
-
Not yet. So far I have confirmed that pfSense transmits DHCPDISCOVER packets on ue0, but no DHCPOFFER is received. A static IP test (172.20.10.2/28, gateway 172.20.10.1) also fails, with ARP for 172.20.10.1 remaining incomplete. I will run a packet capture on OPT3/ue0 next to determine whether any traffic at all is being received from the iPhone.
-
Does ue0 come up with a valid MAC address?
-
@stephenw10 said in iPhone 16e USB tethering on pfSense CE 2.8.1: ue0 appears, but no DHCP / ARP reply:
Does ue0 come up with a valid MAC address?
Yes. ue0 comes up with a valid-looking MAC address:
92:5f:7a:a7:3c:6a
It is UP/RUNNING, but it does not receive DHCP offers, and static ARP to 172.20.10.1 remains incomplete.
-
Hmm, I'd expect that to work. Though I have no way to test it here.
What do you see logged when you connect the iphone? Any errors shown?
-
No obvious errors. When the iPhone is connected and Configuration 3 is selected, ue0 is created successfully with a valid MAC address (92:5f:7a:a7:3c:6a) and can be assigned to OPT3. The interface comes up as UP/RUNNING. DHCP repeatedly sends DISCOVER packets but never receives an OFFER. A static configuration (172.20.10.2/28, gateway 172.20.10.1) also fails, with ARP for 172.20.10.1 remaining permanently “incomplete”. On the iPhone, Personal Hotspot is enabled with both Allow Others to Join and Maximum Compatibility enabled. One thing I am wondering about is whether current pfSense/FreeBSD builds still include and use the proper if_ipheth driver path for modern iPhones. Initially kldload if_ipheth reported the module was missing, and I had to manually obtain and install if_ipheth.ko. I can post the relevant dmesg output if that would be helpful.
-
Yeah, where did you get that module?
Though if it loads correctly then it must be compatible.
But that's why I wanted to see the logs shown when it loads because it sounds like it might be using a generic driver., However that can't be the case if it failed to connect before you added the module.
I also note that if_ipheth.ko is incliuded in the 2.8.1 install. You should not have needed to load anything unless it needed a newer driver perhaps.
-
I re-ran the diagnostics before and after selecting config 3. The important part seems to be:
KLD if_ipheth.ko: depends on kernel - not available or version mismatch
So the manually copied if_ipheth.ko is not loading correctly. After running usbconfig -d ugen6.2 set_config 3, usbconfig shows the iPhone at cfg=3 and dump_curr_config_desc shows:
PTP + Apple Mobile Device + Apple USB Ethernet
Interface 2: AppleUSBEthernetHowever, no ue0 is created:
ifconfig -l -> em0 em1 em2 em3 enc0 lo0 pflog0 pfsync0 ovpns1
ifconfig ue0 -> interface ue0 does not existSo it looks like the iPhone exposes AppleUSBEthernet correctly, but no compatible if_ipheth driver is actually attaching.
-
I removed the manually copied if_ipheth.ko and repeated the test from a clean reboot, so this is now without any manually added driver.
System:
pfSense CE 2.8.1-RELEASE
FreeBSD 15.0-CURRENT #21 RELENG_2_8_1-n256095-47c932dcc0e9 amd64
iPhone:
iPhone 16e, current iOS
Personal Hotspot enabled
Allow Others to Join enabled
Maximum Compatibility enabled
After connecting the iPhone, usbconfig shows:
ugen6.2: <iPhone 5/5C/5S/6/SE/7/8/X/XR Apple, Inc.> at usbus6, cfg=3 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
I then force configuration 3 with:
usbconfig -d ugen6.2 set_config 3
The current config descriptor then shows the expected Apple Ethernet interface:
Configuration index 3
bConfigurationValue = 0x0004
iConfiguration = <PTP + Apple Mobile Device + Apple USB Ethernet>
Interface 2
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x00fd
bInterfaceProtocol = 0x0001
iInterface = <AppleUSBEthernet>
So the iPhone appears to expose AppleUSBEthernet correctly.
However, no network interface is created:
ifconfig -l
returns only:
em0 em1 em2 em3 enc0 lo0 pflog0 pfsync0 ovpns1
There is no ue0.
Also:
ifconfig ue0
returns:
ifconfig: interface ue0 does not exist
The relevant dmesg output only shows the USB device itself:
ugen6.2: <Apple Inc. iPhone> at usbus6
There are no ipheth0, ue0, cdce0, uether, or urndis attach messages.
kldstat also shows no USB Ethernet related modules loaded. It only shows:
kernel
cpuctl.ko
ichsmb.ko
smbus.ko
aesni.ko
cryptodev.ko
coretemp.ko
Earlier, when I had manually copied an external if_ipheth.ko, dmesg showed:
KLD if_ipheth.ko: depends on kernel - not available or version mismatch
so that copied module was clearly not compatible. I have removed it again and am now testing only the clean pfSense 2.8.1 installation.
So the current clean state is:- iPhone is detected by USB
- config 3 is selected
- config 3 exposes AppleUSBEthernet
- but pfSense does not attach any driver to it
- no ue0 interface is created
At this stage the issue no longer appears to be DHCP, ARP, gateway, or OPT3 configuration. The problem seems to be earlier: AppleUSBEthernet is visible in the USB descriptor, but no driver attaches to Interface 2.
Is there a specific module or loader setting required on pfSense 2.8.1 for if_ipheth / AppleUSBEthernet to attach here? Or should if_ipheth already attach automatically once config 3 exposes AppleUSBEthernet?
-
One thing that confuses me is that earlier in troubleshooting I did have a ue0 interface. pfSense showed:
OPT3 (opt3) -> ue0 -> 172.20.10.2/28
and I was able to configure and test that interface. At that stage DHCP failed and ARP to 172.20.10.1 remained incomplete.
After rebooting, removing the manually copied if_ipheth.ko, and repeating the test from a clean state, the iPhone is still detected and AppleUSBEthernet is still exposed in Configuration 3, but no ue0 interface is now created at all.
So there seem to be two different states:
- Earlier: ue0 existed but no connectivity.
- Current: no ue0 is created despite AppleUSBEthernet being present.
I'm not sure what changed between those states, but perhaps that difference is itself a clue.
-
Why not load the 'stock' pfSense kernel module with:
kldload -n /boot/kernel/if_ipheth.koAs @stephenw10 mentions, I also see it included on an 2.8.1. install. The difference would be, earlier, you were using a module apparently copied from a different system?
-
You probably still need to load the kernel module, either manually at the CLI for testing or via /boot/loader.conf.local once it's working.
It should load cleanly and return nothing like:
[2.8.1-RELEASE][admin@t70.stevew.lan]/root: kldload if_ipheth.ko [2.8.1-RELEASE][admin@t70.stevew.lan]/root: kldstat Id Refs Address Size Name 1 47 0xffffffff80200000 2dc8ee0 kernel 2 1 0xffffffff82fc9000 8808 cryptodev.ko 3 1 0xffffffff82fd2000 60a278 zfs.ko 4 1 0xffffffff83e20000 23a0 cpuctl.ko 5 1 0xffffffff83e23000 4250 ichsmb.ko 6 1 0xffffffff83e28000 2178 smbus.ko 7 1 0xffffffff83e2b000 6060 ig4.ko 8 1 0xffffffff83e32000 20f0 coretemp.ko 9 1 0xffffffff83e35000 138a0 dummynet.ko 10 1 0xffffffff83e49000 21e0 if_ipheth.ko -
On my 2.8.1 install the stock module does not appear to be present:
/root: kldload -n /boot/kernel/if_ipheth.ko
kldload: can't load /boot/kernel/if_ipheth.ko: No such file or directory -
[2.8.1-RELEASE][admin@fwr.......]/root: kldload if_ipheth.ko
kldload: if_ipheth.ko is not in the module path
[2.8.1-RELEASE][admin@fwr...........]/root: -
On the system I'm looking at:
[2.8.1-RELEASE][admin@edge]/root: ls -alh /boot/kernel | grep if_ipheth.ko -r--r--r-- 1 root wheel 32K Aug 28 2025 if_ipheth.ko -
@tinfoilmatt said in iPhone 16e USB tethering on pfSense CE 2.8.1: ue0 appears, but no DHCP / ARP reply:
ls -alh /boot/kernel | grep if_ipheth.ko
[2.8.1-RELEASE][admin@fwr1................]/root: ls -alh /boot/kernel | grep if_ipheth.ko
[2.8.1-RELEASE][admin@fwr1................]/root:Nothing here...
-
Maybe it got overwritten (and then that copy removed)?
-
Hmm, I wonder if you accidentally overwrote it somehow?
Anyway try this: if_ipheth.ko.txt (remove the txt extension)
-
Update: I now have the stock driver loading correctly and ue0 being created. Thanks.
After reboot:
kldload if_ipheth.ko
loads cleanly, and kldstat shows:
8 1 0xffffffff8383d000 21e0 if_ipheth.ko
After:
usbconfig -d ugen6.2 set_config 3
the iPhone exposes AppleUSBEthernet and ue0 is created:
ifconfig -l
returns:
em0 em1 em2 em3 enc0 lo0 pflog0 pfsync0 ovpns1 ue0
and:
ifconfig ue0
shows:
ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST>
ether 92:5f:7a:a7:3c:6aSo the driver loads, attaches, and creates a working interface with a valid MAC address.
However, DHCP still fails. Running:
dhclient ue0
only produces repeated:
DHCPDISCOVER on ue0 to 255.255.255.255 port 67
and never receives a DHCPOFFER.
One additional data point: this does not appear to be only a DHCP problem.
Earlier in troubleshooting I manually configured:
ue0 = 172.20.10.2/28
gateway = 172.20.10.1(which is the same addressing my MacBook receives when tethered to this iPhone).
Even with that static configuration, communication still failed. ARP for 172.20.10.1 remained incomplete and the gateway could not be reached. No IPv4 traffic passed.
So the current state appears to be:
- if_ipheth loads correctly
- AppleUSBEthernet is detected
- ue0 is created and comes UP/RUNNING
- DHCP receives no replies
- Static IPv4 communication also fails
which makes me suspect the remaining issue may be below DHCP, perhaps at the Ethernet/frame exchange level between the iPhone and the driver.
The iPhone is an iPhone 16e running the latest iOS. Personal Hotspot is enabled with both “Allow Others to Join” and “Maximum Compatibility” enabled. The same phone and cable work correctly when connected directly to a MacBook.
Privacy Policy · Cookie Policy