After a little wiresharking and some hair loss, I figured out why regular routers can't bypass the god-awful Bell-provided Sagemcom Home Hub 2000 router, connecting directly to Bell through the ONT using PPPoE. It's because the Bell router connects to Bell's servers through an 802.1Q VLAN! VLAN id #35, to be exact.
So, to do this yourself:
- Connect your computer/router directly to the ethernet port of the ONT.
- Use 802.1Q VLAN 35.
- Use PPPoE.
Most civilian routers (including my Linksys EA6300v1) do not support 802.1Q, so you're still kind of screwed there, unless you install custom firmware, get a better router, or connect the ONT directly to a computer. (Alternatively, if the router you want to use doesn't support 802.1Q, you can do the 802.1Q bit using a managed switch. See grawity's comment.) Even if your router does support 802.1Q, the setup instructions are going to vary from router to router, so I can't help you any further, but with those three pieces of information above and hardware that supports 802.1Q and PPPoE, you should be able to get it done.
In Linux
This is how you set this up in linux. Again, you must have your linux computer (/router) connected directly to the ethernet port of your ONT. You'll need the ip
command (provided by iproute2, in case you don't already have it) and rp-pppoe
. Replace enp3s0
with your actual interface name. All commands must be run as root.
First you have to make the VLAN:
# ip link add link enp3s0 name enp3s0.35 type vlan id 35
That creates a new virtual network interface called enp3s0.35. All traffic sent on that interface will get encapsulated into VLAN id 35 before being sent on enp3s0. What actually happens is basically the number 35 will actually get added to every packet before getting sent. Without this extra number, Bell will just ignore you.
Now, you need to configure rp-pppoe. Modify /etc/ppp/pppoe.conf
, changing the following lines:
ETH=enp3s0.35
USER=bxxxxxxx@bellnet.ca
Now, modify /etc/ppp/pap-secrets
, adding the following line:
bxxxxxxx@bellnet.ca * your_ppp_password
Now, you can start pppoe using pppoe-start
. If it works, the command should return after a few seconds. You can also check using ip a
. A new interface should be made called ppp0
with your global IP. The command to stop it is pppoe-stop
. Here's an example of a successful start and stop:
[user@host ~]% sudo pppoe-start
. Connected!
[user@host ~]% ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:21:70:71:82:b9 brd ff:ff:ff:ff:ff:ff
3: enp3s0.35@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:21:70:71:82:b9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::221:70ff:fe71:82b9/64 scope link
valid_lft forever preferred_lft forever
5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc fq_codel state UNKNOWN group default qlen 3
link/ppp
inet 70.27.234.242 peer 10.11.2.201/32 scope global ppp0
valid_lft forever preferred_lft forever
[user@host ~]% sudo pppoe-stop
Killing pppd (4102)
Killing pppoe-connect (4080)
The method of running the ip link
and pppoe-start
commands automatically on boot will vary with your distribution. Again, I can't help you any further here. Router and firewall distributions should have good support for all this stuff. systemd-networkd supports 802.1Q setups at boot. And it is very likely your distro's rp-pppoe package came with a way to start it on boot automatically as well, but you may need to modify it, forbidding it to start until after the 802.1Q interface is up.
Once you have 802.1Q and PPPoE starting automatically on boot, it is now safe to set your Bell router on fire. If you do, please do so in a well-ventilated area and send me a picture. Do not set the ONT on fire.
Bonus Round: openwrt/ea6300v1
As was alluded to before, openwrt has no trouble with weird configurations—that's kind of its thing, really. Even if your router doesn't support 802.1Q, there is a very good chance that it will after having installed openwrt. This is the /etc/config/network
for my ea6300v1:
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fc00::/48'
config interface 'lan'
option type 'bridge'
option ifname 'eth0.1'
option proto 'static'
option ipaddr '10.0.0.1'
option netmask '255.255.255.0'
option ip6assign '60'
config interface 'wan'
option ifname 'eth0.35' # <----
option proto 'pppoe' # <----
option username 'bxxxxxxx@bellnet.ca' # <----
option password 'your ppp passphrase' # <----
config switch
option name 'switch0'
option reset '1'
option enable_vlan '1'
config switch_vlan
option device 'switch0'
option vlan '1'
option ports '0 1 2 3 5t'
config switch_vlan
option device 'switch0'
option vlan '35' # <----
option ports '4t 5t' # <----
I put # <----
next to all of the lines I had to modify to get Bell Fibre to work. In the last one I added a t
to port 4, telling the switch to tag everything coming out of port 4 (the WAN port) with 802.1Q tags. So that t
is supposed to be there. It's not a mistake.
The process will (probably) be very similar for your consumer-grade router. Bear in mind different routers use different switch architectures and port numberings, so you may have to actually put a little thought into it. For example, maybe your WAN port is port 0—not port 4. So, definitely do not copy and paste unless by some wild coincidence your router actually is an ea6300v1. I believe in you.