Bottom Line: Here’s how to get your PPP password for a Zyxel C1000Z modem so you can put it into bridge mode and use your router instead.

I recently changed from internet service providers from Comcast to CenturyLink. Overall, I’m pleased with the change (mostly because I’m paying about 1/3 the price for a negligible difference in speed — and I was finally able to turn in all that Comcast TV equipment that’s been sitting in my closet for the last 3 years). But I’m not writing to talk about CenturyLink, I’m writing to show others how I was finally able to get my PPP password from my CenturyLink modem for use with my new(ish) router: an Apple Airport Extreme.

Because the modem generally does the PPP authentication, that’s where we have to look for the credentials. My first attempt was going through the modem configuration pages, where I saw the spaces to input PPP info, with the password obscured by asterisks. I thought I’d be clever and modify the CSS to reveal the password — but it wasn’t there.

Next, I ended up barking up the wrong tree by exporting the config file from the modem and parsing through that. I did find a section that looked promising:

<BackupUsername>[email protected]</BackupUsername>

Noting the = at the end of the password section, I figured it was probably base64 encoded. Unfortunately, decoding it only left me with Salted__bunchofoddcharacters… which didn’t work at all, since I didn’t know their salt or what algorithm they were using.

Finally, I ran across a few links that were instrumental to me figuring everything out:

Basically, I followed their instructions to turn on telnet access (making sure to turn it off again afterwards), and ran the below commands (either / or — they should give you the same password).

# Look for the far left number (process id) of the line that has `ppp` somewhere in it
# Put it instead of `process_id` in the next command
cat proc/process_id/cmdline

or, alternatively:

/usr/bin/pidstat -l -C pppd

However, it still wasn’t working with that password. I eventually figured out that it required one more simple step: just base64 decoding. Being a Python guy, I initially did this:

python3 -c 'import base64; import sys; print(base64.b64decode(sys.argv[1]).decode('utf8'))' 'encoded_password'

but I later realized I could have saved myself some typing and just done this:

echo "encoded_password" | base64 --decode

Once I had my decoded password, I plugged it into my Airport Extreme with the username from the XML config file [email protected] and it worked like a charm.