# PPPoE IPv6 Dual-Stack Home Setup

> PPPoE IPv6 dual-stack configuration on VyOS for home and SOHO networks - DHCPv6 Prefix Delegation, SLAAC, Router Advertisements, and firewall rules

Source: https://opennix.org/en/docs/vyos/examples/pppoe-ipv6/


PPPoE IPv6 dual-stack setup for home and SOHO networks with automatic IPv6 prefix acquisition via DHCPv6-PD and distribution through SLAAC.

## Use Case

- **Home Networks**: Dual-stack internet connection
- **SOHO**: Small office connectivity with IPv6
- **ISP Integration**: Working with providers that support DHCPv6-PD
- **Modern Stack**: Full IPv4+IPv6 connectivity

## Network Topology

```
         Internet (ISP)
               │
           PPPoE (pppoe0)
               │
         ┌─────┴─────┐
         │   VyOS    │
         │  Gateway  │
         └─────┬─────┘
               │ eth1 (LAN)
               │ IPv6 PD: ::/64
         ┌─────┴─────────┐
         │  Home Network │
         │  Devices with │
         │  SLAAC IPv6   │
         └───────────────┘
```

## Requirements

- ISP support for DHCPv6 Prefix Delegation
- VyOS 1.4+
- PPPoE credentials from the ISP

## PPPoE Configuration with IPv6

### PPPoE Interface

```bash
configure

# PPPoE on eth0 (WAN)
set interfaces pppoe pppoe0 source-interface 'eth0'
set interfaces pppoe pppoe0 authentication username 'your_isp_username'
set interfaces pppoe pppoe0 authentication password 'your_isp_password'

# IPv6
set interfaces pppoe pppoe0 ipv6 address autoconf
set interfaces pppoe pppoe0 ipv6 enable

# DHCPv6-PD (obtain prefix from the ISP)
set interfaces pppoe pppoe0 dhcpv6-options pd 0 length '56'
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth1 address '1'
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth1 sla-id '0'

commit
```

### LAN Interface with IPv6

```bash
configure

# LAN interface
set interfaces ethernet eth1 address '192.168.1.1/24'
set interfaces ethernet eth1 description 'LAN'

# Router Advertisement for SLAAC
set service router-advert interface eth1 prefix ::/64
set service router-advert interface eth1 name-server 'fe80::1'
set service router-advert interface eth1 other-config-flag

commit
save
```

### Firewall for IPv6

```bash
configure

# IPv6 firewall WAN
set firewall ipv6-name WANv6_LOCAL default-action 'drop'
set firewall ipv6-name WANv6_LOCAL rule 10 action 'accept'
set firewall ipv6-name WANv6_LOCAL rule 10 state established 'enable'
set firewall ipv6-name WANv6_LOCAL rule 10 state related 'enable'

set firewall ipv6-name WANv6_LOCAL rule 20 action 'accept'
set firewall ipv6-name WANv6_LOCAL rule 20 protocol 'ipv6-icmp'

# DHCPv6
set firewall ipv6-name WANv6_LOCAL rule 30 action 'accept'
set firewall ipv6-name WANv6_LOCAL rule 30 protocol 'udp'
set firewall ipv6-name WANv6_LOCAL rule 30 destination port '546'
set firewall ipv6-name WANv6_LOCAL rule 30 source port '547'

commit
save
```

## Verification

```bash
# PPPoE status
show interfaces pppoe pppoe0

# IPv6 address
show interfaces pppoe pppoe0 brief

# DHCPv6-PD prefix
show dhcpv6 client leases

# Router Advertisement
show ipv6 route

# Test connectivity
ping6 2001:4860:4860::8888
```

## Cloud Integration

### Note for Cloud Providers

PPPoE is generally not used in cloud environments (Yandex Cloud, VK Cloud) - they provide direct DHCP/Static connectivity. This example is relevant for:
- On-premises home deployments
- Branch offices with DSL/Fiber PPPoE
- Hybrid scenarios where a VyOS box in the office connects to an ISP

For cloud deployments, see the other examples (Tunnelbroker IPv6, VPN scenarios).

## References

- [VyOS PPPoE Configuration](https://docs.vyos.io/en/latest/configuration/interfaces/pppoe.html)
- [VyOS DHCPv6](https://docs.vyos.io/en/latest/configuration/service/dhcp-server.html#dhcpv6)
- [RFC 8415 - DHCPv6](https://datatracker.ietf.org/doc/html/rfc8415)
- [VyOS IPv6 Official Example](https://docs.vyos.io/en/latest/configexamples/pppoe-ipv6-basic.html)

