{"id":15635896,"url":"https://github.com/passy/raspbian-ipv6-router","last_synced_at":"2026-07-16T12:33:16.858Z","repository":{"id":66088563,"uuid":"80758977","full_name":"passy/raspbian-ipv6-router","owner":"passy","description":"A Raspberry Pi config to use it as DHCP/RA server","archived":false,"fork":false,"pushed_at":"2018-02-26T18:49:30.000Z","size":2267,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-29T06:08:31.350Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/passy.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-02T19:09:37.000Z","updated_at":"2022-06-19T03:13:07.000Z","dependencies_parsed_at":"2023-02-22T06:00:41.628Z","dependency_job_id":null,"html_url":"https://github.com/passy/raspbian-ipv6-router","commit_stats":{"total_commits":73,"total_committers":1,"mean_commits":73.0,"dds":0.0,"last_synced_commit":"a8ad8b60ec9996169a3ef33b07bd83748204aa88"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/passy/raspbian-ipv6-router","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fraspbian-ipv6-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fraspbian-ipv6-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fraspbian-ipv6-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fraspbian-ipv6-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/passy","download_url":"https://codeload.github.com/passy/raspbian-ipv6-router/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fraspbian-ipv6-router/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35544514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-16T02:00:06.687Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T11:01:18.559Z","updated_at":"2026-07-16T12:33:16.836Z","avatar_url":"https://github.com/passy.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Passy's Raspbian ADSL IPv6 Router\n\n\u003cimg src=\"https://www.raspberrypi.org/wp-content/uploads/2015/08/raspberry-pi-logo.png\" width=150 align=left\u003e\n\n## Setup\n\nI bought\na [DrayTek Vigor 130](http://www.draytek.co.uk/products/business/vigor-130)\nwhich is a bridge-only ADSL2+/VDSL modem mostly used in business environments (I\nlike my cheap enterprise hardware) which is plugged into a normal ethernet\nswitch which also connects my Raspberry Pi B+ (provisioned by this repo) and\na [UniFi® AP AC LITE](https://www.ubnt.com/unifi/unifi-ap-ac-lite/) for WiFi.\nThe switch is just some boring Gigabit switch from Netgear which had a\ntrustworthy looking amount of stars on Amazon.\n\nNothing special or particularly exciting about this. It looks roughly like this:\n\n```\n+---------+     +---------+     +---------+\n|         |     |         |     |         |\n|  Modem  |     |  DHCP/  |     |  WiFi   |\n|         |     |  PPP    |     |         |\n+--------++     +----|----+     ++--------+\n         |           |           |\n         |           |           |\n         |           |           |\n      +--v-----------v-----------v---+\n      |                              |\n      |            Switch            |\n      |                              |\n      +------------------------------+\n```\n\nThe nice thing about this is that I get a lot of control about all the\nindividual pieces and if something goes wrong I don't just have one big black\nbox that I'll have to hope will answer my prayers.\n\nIn particular, my previous modem had the annoying hard-coded behavior of\nretrying five times on connection issues and then require a hard reset.\n\nWith my Raspberry Pi having this responsibility now, I get fine-grained\ncontrol over what it will do in this situation.\n\nA thing I was fascinated by that probably no one else cares about is\nthat I could just plug my Modem into the switch and -- without specifying\nanything on my Raspberry Pi -- open a PPPoE connection to it. Layer 2, baby!\n\n## Subnets and prefix allocation\n\nFor a long time I was under the impression that I'd have to use something\nlike wide-dhcpcv6-client to get a /56 subnet assigned from my ISP. In actuality,\nthey had assigned me a static /56 and the timeouts I was seeing in the log\nweren't an incorrect setup on my end, but simply indicating that they did\nnot even have a server running on their end.\n\nThe important bit that took me embarrassingly long to figure out was\nthat I needed to set the static IPv6 address of my Pi to one within\nthat subnet. I started just going with one of the addresses within\nthe /64 of the IPv6 address I got assigned on `ppp0`. This worked in\nso far that I could actually make connections from my Pi, but\nnone of my other devices on the network could access the internet.\nThis is where my NAT-trained brain collided with the IPv6 realities\nwhere routing doesn't simply mean adding a magical default gateway\nand letting masquerading take care of it.\n\nFrom everything I've read online, it is rather unusual to have your\n/56 assigned to your account, so you may very likely have to set up WIDE-DHCPv6.\nSee the resources section at the end of this page for more information.\n\n## Plan\n\nSince this is a Rasperry Pi, I'd like to make some use of the GPIO ports. Maybe\nshow the number of devices on an LCD, or have an LED flash up if someone new\ngets a lease. Now that it does PPP, I should definitely be able to show an LED\nwith the connection status.\n\nCrazy long-term goal: build my own LTE fallback when the ADSL goes down?\n\n## Preparing the SD Card\n\n- [Get Raspbian Jessie Lite](https://downloads.raspberrypi.org/raspbian_lite_latest.torrent).\n  I used `2016-03-18` for this. Also, don't be a jerk, and use the Torrent\n  option.\n- I use Lite because I don't even want to connect a monitor to the Pi and\n  updating Xorg takes ages.\n- Copy it onto an SD card. I'll leave it to you to figure out which device\n  you're writing to, but keep in mind that this image is intended to partition\n  the entire card, so don't specify a partition (i.e. `sdb` not `sdb1`):\n  `dd bs=4M if=2016-03-18-raspbian-jessie.img of=/dev/sdb`\n- Follow [this guide](https://medium.com/@zw3rk/quick-headless-raspberry-pi-setup-52ad6dd312c4)\n  to get SSH enabled on first boot.\n\n## Initial setup\n\n- Plug the Pi in and connect it to a DHCP-enabled router via ethernet.\n- My old DD-WRT had the `.lan` domain, so I could directly connect to\n  `raspberrypi.lan`. Obviously, take care of conflicts if you have more than\n  one. `nmap` is your friend.\n- `ssh pi@raspberrypi.lan`, password is `raspberry`.\n- This could potentially be part of the ansible script, but I prefer pushing the\n  SSH key over manually to minimize the chance of locking myself out.\n- `ssh pi@raspberrypi.lan \"mkdir -p ~/.ssh/\"; scp ~/.ssh/id_rsa.pub pi@raspberrypi.lan:/home/pi/.ssh/authorized_keys`\n- *Dont forget this one:* Resize your partition or you're gonna have a bad time.\n  Raspbian only leaves you with a few hundred megabytes left, so run\n  `sudo raspi-config` and select option 1: \"Expand Filesystem\".\n\n## Ansible\n\nCopy `playbook.yml.example` to `playbook.yml` and make the necessary adjustments,\nnotably add your premiumize.me credentials to it. Afterwards, you can run it\nlike:\n\n```\nansible-playbook -i hosts playbook.yml\n```\n\nThis assumes that the hostname in `hosts` can be resolved and you can log in\npassword-less via the `pi` user. It also expects the Pi to already have a\nworking internet connection.\n\n## Resources\n\n- [Using PPPoE on Linux](https://blog.confirm.ch/using-pppoe-on-linux/)\n- [Time Warner Road Runner, Linux, and large IPv6 subnets](https://major.io/2015/09/11/time-warner-road-runner-linux-and-large-ipv6-subnets/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassy%2Fraspbian-ipv6-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpassy%2Fraspbian-ipv6-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassy%2Fraspbian-ipv6-router/lists"}