{"id":22305651,"url":"https://github.com/kioubit/pndpd","last_synced_at":"2025-08-23T05:32:42.022Z","repository":{"id":45255561,"uuid":"440869439","full_name":"Kioubit/pndpd","owner":"Kioubit","description":"NDP Proxy / Responder daemon (IPv6)","archived":false,"fork":false,"pushed_at":"2025-07-02T10:40:18.000Z","size":101,"stargazers_count":42,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-29T04:55:24.824Z","etag":null,"topics":["berkeley-packet-filter","bpf","go","golang","icmpv6","ipv6","linux","ndp","ndp-proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kioubit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2021-12-22T13:36:30.000Z","updated_at":"2025-07-02T10:40:22.000Z","dependencies_parsed_at":"2024-07-07T15:27:18.662Z","dependency_job_id":"6b8c69fe-17c2-4fcd-8d09-b8ca1fabc483","html_url":"https://github.com/Kioubit/pndpd","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/Kioubit/pndpd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2Fpndpd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2Fpndpd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2Fpndpd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2Fpndpd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kioubit","download_url":"https://codeload.github.com/Kioubit/pndpd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2Fpndpd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271745597,"owners_count":24813509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"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":["berkeley-packet-filter","bpf","go","golang","icmpv6","ipv6","linux","ndp","ndp-proxy"],"created_at":"2024-12-03T19:12:37.041Z","updated_at":"2025-08-23T05:32:41.770Z","avatar_url":"https://github.com/Kioubit.png","language":"Go","readme":"# PNDPD - NDP Proxy / Responder (IPv6)\n## Features\n- **Efficiently** process incoming packets using bpf (which runs in the kernel)\n- **Proxy** NDP between interfaces with an optional whitelist\n- Optionally determine whitelist **automatically** based on the IPs assigned to the interfaces\n- **Respond** to NDP solicitations for all or only whitelisted addresses on an interface\n- Permissions required: root or **CAP_NET_RAW**\n- Easily expandable with modules\n\n## Installing \u0026 Updating\n\n1) Download the latest release from the [releases page](https://github.com/Kioubit/pndpd/releases) and move the binary to the ``/usr/local/bin/`` directory under the filename ``pndpd``.\n2) Allow executing the file by running ``chmod +x /usr/local/bin/pndpd``\n3) Install the systemd service unit file:\n```` \nwget https://raw.githubusercontent.com/Kioubit/pndpd/master/pndpd.service -P /etc/systemd/system/\nsystemctl enable pndpd.service\n```` \n4) Download and install the config file\n```` \nmkdir -p /etc/pndpd\nwget https://raw.githubusercontent.com/Kioubit/pndpd/master/pndpd.conf -P /etc/pndpd/\n````\n5) Edit the config at ``/etc/pndpd/pndpd.conf`` and then start the service using ``service pndpd start``\n\n## Manual Usage\n```` \npndpd proxy \u003cexternal interface\u003e \u003cinternal interface\u003e \u003c[optional] 'auto' to determine filters from the internal interface or whitelist of CIDRs separated by a semicolon\u003e\npndpd responder \u003cexternal interface\u003e \u003c[optional] 'auto' to determine filters from the external interface or whitelist of CIDRs separated by a semicolon\u003e\npndpd config \u003cpath to file\u003e\n````\n**Example:** ``pndpd proxy eth0 tun0 auto``\n\nFind more options and additional documentation in the example config file (``pndpd.conf``).\n\n## Example Scenario\n### Proxying NDP requests for a /64 IPv6 subnet on a VPS to a VPN tunnel \n\n#### 1) Inspecting the initial IP configuration\n````\nroot@vultr:~# ip -6 addr show dev enp1s0\n2: enp1s0: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n    inet6 2001:11ff:7400:82f2:5400:4ff:fe53:26cf/64 scope global dynamic mngtmpaddr \n       valid_lft 2591753sec preferred_lft 604553sec\n    inet6 fe80::5400:4ff:fe53:26cf/64 scope link \n       valid_lft forever preferred_lft forever\n```` \nAs we can see from the output, a `/64` subnet of public IPv6 addresses has been assigned to our VPS on our WAN interface `enp1s0`:\n`2001:11ff:7400:82f2:5400:4ff:fe53:26cf/64`.\n\n#### 2) Routing the subnet to the VPN interface\nTo route this subnet to our VPN interface `tun0` we need to assign one ip address to the VPS and the rest to the VPN interface.  \nTo do that we edit the `/etc/network/interface` file (for systems that use ifupdown2):\n\n##### Initial contents:\n````\nallow-hotplug enp1s0\n\niface enp1s0 inet static \n    #.... IPv4 config here ...\n\niface enp1s0 inet6 static\n    address 2001:11ff:7400:82f2:5400:4ff:fe53:26cf/64\n    gateway fe80::fc00:4ff:fe53:26cf\n````\n##### After editing:\n````\nallow-hotplug enp1s0\n\niface enp1s0 inet static \n    #.... IPv4 config here ...\n\niface enp1s0 inet6 static\n    address 2001:11ff:7400:82f2::1/128\n    gateway fe80::fc00:4ff:fe53:26cf\n````\nOn the VPN interface we can now assign the rest of the addresses:\n\n`ip addr add 2001:11ff:7400:82f2::1/64 dev tun0`\n\n#### 3) Running PNDPD\nTo proxy NDP requests from the outside interface to the VPN interface we run pndp like this:\n````\nsudo pndpd proxy enp1s0 tun0 auto\n````\nNote: sudo is not required if you are using the capability as described in the systemd unit file.\nOptionally confirm that the setup works via ping and tcpdump.  \n\n## Building PNDPD\nFor building, the version of go needs to be installed that is specified in the `go.mod` file. A makefile is available. Optionally adjust the ``MODULES`` variable to include or exclude modules from the \"modules\" directory.\n````\nmake clean; make release\n```` \nFind the binaries in the ``bin/`` directory\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkioubit%2Fpndpd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkioubit%2Fpndpd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkioubit%2Fpndpd/lists"}