IPv4 Address:-
IPv6 Address:-
Service Provider:-
SSL Information:-
HTTP Protocol:-
Database:-
Web:-
Zen Broadband with IPv6 using FreeBSD ppp router [29/May/2016]   Link Aggregation/Bonding in FreeBSD using LACP     Using FreeBSD as a Hypervisor (using bhyve and vm-bhyve to manage them)  

A little while ago, i switched broadband providers so that I could enjoy the greater speeds on FTTC (fibre-to-the-cabinet) technology.  My existing ISP charged an insanely high amount for their unlimited package so I went through the hassle of renumbering my home network.

I chose to go with Zen broadband... I've used Zen in the past, and always been happy... plus they support IPv6 (of which I'm a big supporter)

So... here's how to connect to Zen broadband (and possibly others) using FreeBSD as a router (via PPPoE) with the Zen provided DSL modem in passthrough mode.

Zen provide a Zyxel VMG1312-B10D DSL modem.  First you need to change the modem into bridged mode.  I won't detail that here, there's way too many documents online that show how to do it.  (alternatively, use another modem in bridge mode... I couldn't get a Draytek to bridge properly – so perhaps avoid that.)

On the FreeBSD router, you need a dedicated network card for running PPPoE – I added an intel gigabit card to my router, so my PPPoE interface is igb0

First, we need to load some kernel modules, so add to /boot/loader.conf:

netgraph_load="YES"
ng_ether_load="YES"
ng_pppoe_load="YES"
ng_socket_load="YES" Copy


These will be activated when you reboot.

Now we need to configure PPP.  Replace the entire contents of /etc/ppp/ppp.conf with:

zen:
    set speed sync
    set mru 1492
    set mtu 1492
    set ctsrts off

    enable echo
    set echoperiod 15
    enable lqr
    set lqrperiod 15

    set log phase connect ipcp ipv6cp tun

    enable ipcp
    disable dns

    set device PPPoE:igb0
    set redial 10
    set server /tmp/pppoe-adsl0 "" 0177

    set authname USERNAMEHERE
    set authkey PASSWORDHERE

    add! default HISADDR
    add! default HISADDR6 Copy


Put your Zen-provided username and password in place of the capitalised placeholders above.  Also, change 'igb0' to a different interface depending on your router configuration.

Now, we need to set ppp to start on boot, so add to /etc/rc.conf:

ipv6_cpe_wanif="tun0"
ifconfig_tun0_ipv6="inet6 -ifdisabled -no_radr accept_rtadv"
# PPPoE configuration
ppp_enable="YES"
ppp_program="/usr/sbin/ppp"
ppp_nat="NO"
ppp_user="root"
ppp_profile="zen"
ppp_zen_mode="ddial"
ppp_zen_nat="NO" Copy


This will load the 'zen' profile in 'ddial' mode on boot.  It disables NAT in the PPP daemon.

The above is enough to negotiate IPv4, and to start the IPv6 negotiation – but zen requires that you use SLAAC to obtain an IPv6 IP, so we need to create another file for this.  This will run after connecting.  Create the file /etc/ppp/ppp.linkup with the following contents:

zen:
    shell /sbin/ifconfig tun0 inet6 -ifdisabled -no_radr accept_rtadv
    shell /sbin/rtsol -a tun0 & Copy


This enables SLAAC on the tun0 interface (the pseudo-interface that ppp creates) and triggers rtsol to obtain an IPv6 IP.

Zen also issue a /48 IPv6 netblock, which seems to be routed over the link automatically (although others say you need to do proxy DHCPv6 for it to work – I certainly don’t need to)

  Link Aggregation/Bonding in FreeBSD using LACP     Using FreeBSD as a Hypervisor (using bhyve and vm-bhyve to manage them)  
Copyright © 2024 Daniel Austin MBCS.
Proudly hosted using the FreeBSD operating system.
 
E-mail me
PGP Key
E-mail me
LOGGED IN
Login
padlock icon
LOGIN ERROR#123: random error here