This works until I configure even the most basic firewall. If I add just a simple zone based firewall to protect the router itself then the ipoe server stops receiving DHCP requests (which are there, and I can see coming in ‘monitor traffic’.
I tried:
leaving the all interfaces entirely out of the firewall and only defining rules between the public and local interfaces
putting eth1.1001 and eth1.1001.* into a specific zone with everything accepted both from and to the public and local interfaces, if this even makes sense
logging every deny in every zone, still I don’t get anything logged that pertains to the ipoe interface
I am not even sure where to begin handling this kind of traffic in the firewall. Any help?
Version: VyOS 1.5-stream-2025-Q1
Release train: circinus
Release flavor: generic
Built by: VyOS Networks Iberia S.L.U.
Built on: Thu 13 Feb 2025 18:06 UTC
Build UUID: b38b28e0-a516-4f56-a596-5502ae094d3b
Build commit ID: 5128f5e45cdb73-dirty
Architecture: x86_64
Boot via: installed image
System type: bare metal
Hardware vendor: Supermicro
Hardware model: Super Server
Hardware S/N: 0123456789
The things appears to be a bit different than it seemed at first, firewall is a factor but not as I initially thought:
no firewall => ipoe-server works as intended from boot on
firewall => after boot, or config rollback, I need to manually restart the ipoe-server once before it starts processing requests
[just rebooted, waited some minutes]
lele@vyos:~$ show ipoe-server sessions
ifname | username | calling-sid | ip | ip6 | ip6-dp | rate-limit | type | comp | state | uptime
--------+----------+-------------+----+-----+--------+------------+------+------+-------+--------
lele@vyos:~$ restart ipoe-server
lele@vyos:~$ show ipoe-server sessions
ifname | username | calling-sid | ip | ip6 | ip6-dp | rate-limit | type | comp | state | uptime
---------------+---------------+-------------------+---------------+--------------------------------------+--------------------+---------------+------+------+--------+----------
eth1.1001.101 | eth1.1001.101 | d4:01:c3:30:f1:2f | 100.65.21.200 | fd01:200:99:1:d601:c3ff:fe30:f12f/64 | fd01:200:99:2::/64 | 100000/100000 | ipoe | | active | 00:00:05
lele@vyos:~$ show log ipoe-server
Mar 17 20:40:16 systemd[1]: Starting [email protected] - Accel-PPP - High performance VPN server application for Linux...
Mar 17 20:40:16 systemd[1]: Started [email protected] - Accel-PPP - High performance VPN server application for Linux.
Mar 17 20:43:24 accel-ipoe[4407]: terminate, sig = 15
Mar 17 20:43:36 accel-ipoe[5098]: eth1.1001.101:: send [RADIUS(1) Access-Request id=1 ...
Mar 17 20:43:36 accel-ipoe[5098]: eth1.1001.101:: recv [RADIUS(1) Access-Accept id=1 ...
Mar 17 20:43:36 accel-ipoe[5098]: eth1.1001.101:eth1.1001.101: ipoe: session started
The firewall is a very simple zone-based firewall, with two zones:
set zone router default-log
set zone router from untrust firewall name 'untrust-to-local'
set zone router local-zone
set zone untrust default-log
set zone untrust from router firewall name 'local-to-untrust'
set zone untrust interface 'eth3'
set ipv4 name local-to-untrust default-action 'accept'
set ipv4 name untrust-to-local default-action 'drop'
set ipv4 name untrust-to-local default-log
set ipv4 name untrust-to-local rule 1 action 'accept'
set ipv4 name untrust-to-local rule 1 state 'established'
set ipv4 name untrust-to-local rule 1 state 'related'
set ipv4 name untrust-to-local rule 2 action 'drop'
set ipv4 name untrust-to-local rule 2 log
set ipv4 name untrust-to-local rule 2 state 'invalid'
set ipv4 name untrust-to-local rule 10 action 'accept'
set ipv4 name untrust-to-local rule 10 source group network-group 'trusted'
Not sure if it’s still something I am missing. Hope it helps.