6

What is the best way to be able to get IPv6 addresses over PPPoe?

I currently use NM-Applet to get internet service from my ISP, but it has no IPv6 tab on PPPOE connections. I wouldn't mind using some command line tool, but it would be nice to transfer my settings from NM-applet to whatever tool if I have to do that.

Azendale
  • 12,021

2 Answers2

13

You can try adding

+ipv6 ipv6cp-use-ipaddr

to /etc/ppp/options. Depending on how your ISP provides IPv6 this might be enough to give the machine itself IPv6.

Many ISPs assume that a router connects with PPPoE instead of a PC, so this might not work for you. The only way to get IPv6 in this situation is to configure your machine as a router. It should then use DHCP for IPv6 to ask for Prefix Delegation. The prefix it gets can then be used to assign /64 subnets to your networks or your local machine. And if you want to provide IPv6 service to your local networks you should run radvd (router advertisement daemon) to advertise that your machine is a router.

The easiest is to use wide-dhcpdv6 for this. The basic idea is to request prefix delegation from one interface and then use that prefix to assign subnets to other interfaces, like:

interface ppp0 {
    # Request Prefix Delegation on ppp0, and give the received prefix id 0
    send ia-pd 0;
};

# Use subnets from the prefix with id 0
id-assoc pd 0 {
    prefix-interface eth0 {
        # Assign subnet 1 to eth0
        sla-id 1;
    };
};

Let's say that you received prefix 2001:db8:1234::/48 from your ISP. This example would then assign 2001:db8:1234:1::/64 to eth0.

A basic radvd.conf would look like:

interface eth0
{
    AdvSendAdvert on;
    prefix ::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
    };
};

Oh, and don't forget to put

net.ipv6.conf.all.forwarding=1

in your /etc/sysctl.conf.

0

Sander Steffann's answer is great, but if you found you got the IPv6 address (can be checked via ip addr or ifconfig), and mtr -6 www.google.com was still not working, it might be caused by some sort of default routing assignment in your local router (can be checked via ip -6 route or netstat -6rn).

One way to solve this issue is to disable RA on your ethernet port, like this (change the existing file in /etc/netplan/):

network:
    version: 2
    renderer: networkd
    ethernets:
        enp3s0:
            accept-ra: false