When connecting via a Huawai E169 UTMS USB stick through O2 Germany’s network, the data stick or the network suggests a PPP IPCP remote address of 0.0.0.0. FreeBSD refuses to ifconfig the tun interface with this endpoint address.
Fortunately, ppp(8) offers a configuration parameter to influence the IP addresses negotiated with the peer (ifaddr), and suggesting a different address will make the configuration work.
If you get this log output from ppp, you need to configure address selection:
IPCP: deflink: RecvConfigAck(4) state = Req-Sent IPCP: IPADDR[6] 10.68.235.57 IPCP: PRIDNS[6] 193.189.244.197 IPCP: SECDNS[6] 193.189.244.205 IPCP: deflink: State change Req-Sent --> Ack-Rcvd IPCP: deflink: RecvConfigReq(47) state = Ack-Rcvd IPCP: [EMPTY] IPCP: deflink: SendConfigAck(47) state = Ack-Rcvd IPCP: [EMPTY] IPCP: deflink: State change Ack-Rcvd --> Opened IPCP: deflink: LayerUp. IPCP: myaddr 10.68.235.57 hisaddr = 0.0.0.0 Warning: iface add: ioctl(SIOCAIFADDR, 10.68.235.57 -> 0.0.0.0): Destination address required Error: ipcp_InterfaceUp: unable to set ip address
Here’s my complete ppp.conf, with the ifaddr line included:
u3g: set device /dev/cuaU0.0 set speed 115200 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 set authname internet set authkey internet set log local phase ipcp set dial "ABORT BUSY TIMEOUT 2 \ \"\" \ AT OK-AT-OK \ AT+CFUN=1 OK-AT-OK \ AT+CMEE=2 OK-AT-OK \ AT+CSQ OK \ AT+CGDCONT=1,\\\"IP\\\",\\\"internet\\\" OK \ AT+CGACT? OK-AT-OK \ AT+CGATT? OK \ AT+CGCLASS? OK \ AT+COPS? OK \ ATD*99***1# CONNECT" set crtscts on nat enable yes add default HISADDR disable dns
This applies to both 7-stable and 8-stable (with both the old and the new USB stacks). I’ve used u3g(4) on both occasions. The original ppp.conf for 3G modems is based off this one from Nick Hibma.
This is how it looks like when using ifaddr:
IPCP: PRIDNS[6] 10.11.12.13 IPCP: SECDNS[6] 10.11.12.14 IPCP: PRINBNS[6] 10.11.12.13 IPCP: MS NBNS req 130 - NAK?? IPCP: SECNBNS[6] 10.11.12.14 IPCP: MS NBNS req 132 - NAK?? IPCP: deflink: SendConfigReq(2) state = Req-Sent IPCP: IPADDR[6] 10.0.0.1 IPCP: COMPPROTO[6] 16 VJ slots with slot compression IPCP: deflink: RecvConfigReq(50) state = Req-Sent IPCP: [EMPTY] IPCP: deflink: SendConfigNak(50) state = Req-Sent IPCP: IPADDR[6] 10.0.0.2 IPCP: deflink: RecvConfigRej(2) state = Req-Sent IPCP: COMPPROTO[6] 16 VJ slots with slot compression IPCP: deflink: SendConfigReq(3) state = Req-Sent IPCP: IPADDR[6] 10.0.0.1 IPCP: deflink: RecvConfigNak(3) state = Req-Sent IPCP: IPADDR[6] 10.42.237.110 IPCP: IPADDR[6] changing address: 10.0.0.1 --> 10.42.237.110 IPCP: deflink: SendConfigReq(4) state = Req-Sent IPCP: IPADDR[6] 10.42.237.110 IPCP: deflink: RecvConfigAck(4) state = Req-Sent IPCP: IPADDR[6] 10.42.237.110 IPCP: deflink: State change Req-Sent --> Ack-Rcvd IPCP: deflink: RecvConfigReq(51) state = Ack-Rcvd IPCP: [EMPTY] IPCP: deflink: SendConfigAck(51) state = Ack-Rcvd IPCP: [EMPTY] IPCP: deflink: State change Ack-Rcvd --> Opened IPCP: deflink: LayerUp. IPCP: myaddr 10.42.237.110 hisaddr = 10.0.0.2 PPP ON freebsd-current>