{"id":51918429,"url":"https://github.com/oneclickvirt/ndpresponder","last_synced_at":"2026-07-27T14:30:36.309Z","repository":{"id":357186325,"uuid":"1235674075","full_name":"oneclickvirt/ndpresponder","owner":"oneclickvirt","description":"IPv6 Neighbor Discovery Responder for KVM servers","archived":false,"fork":false,"pushed_at":"2026-06-29T02:44:20.000Z","size":122,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-29T04:21:40.334Z","etag":null,"topics":["arp","ipv6","multicast","ndp","ndppd","ndpresponder","unicast"],"latest_commit_sha":null,"homepage":"https://github.com/oneclickvirt/pve","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oneclickvirt.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-11T14:46:07.000Z","updated_at":"2026-06-29T02:44:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oneclickvirt/ndpresponder","commit_stats":null,"previous_names":["oneclickvirt/ndpresponder"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oneclickvirt/ndpresponder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fndpresponder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fndpresponder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fndpresponder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fndpresponder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oneclickvirt","download_url":"https://codeload.github.com/oneclickvirt/ndpresponder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Fndpresponder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35955550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-27T02:00:06.776Z","response_time":101,"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":["arp","ipv6","multicast","ndp","ndppd","ndpresponder","unicast"],"created_at":"2026-07-27T14:30:36.100Z","updated_at":"2026-07-27T14:30:36.242Z","avatar_url":"https://github.com/oneclickvirt.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IPv6 Neighbor Discovery Responder\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/oneclickvirt/ndpresponder/build.yml)](https://github.com/oneclickvirt/ndpresponder/actions) [![GitHub code size](https://img.shields.io/github/languages/code-size/oneclickvirt/ndpresponder?style=flat\u0026logo=GitHub)](https://github.com/oneclickvirt/ndpresponder)\n\n[中文说明](README_CN.md)\n\n**ndpresponder** is a Go program that listens for ICMPv6 neighbor solicitations on a network interface and responds with neighbor advertisements, as described in [RFC 4861](https://tools.ietf.org/html/rfc4861) - IPv6 Neighbor Discovery Protocol.\n\nThe source IPv6 address of the neighbor advertisement is set to the same value as the target address in the neighbor solicitation.\nThis enables **ndpresponder** to work in certain KVM virtual servers where NDP uses link-local addresses but *ebtables* drops outgoing packets from link-local addresses.\n\nBoth unicast (`is-alive`) and multicast (`who-has`) neighbor solicitations are handled, so IPv6 addresses remain reachable even after the router's neighbor cache expires.\n\n## Installation\n\nThis program is written in Go. Compile and install with:\n\n```bash\nenv CGO_ENABLED=0 go install github.com/oneclickvirt/ndpresponder@main\n```\n\nAlso available as a Docker container:\n\n```bash\ndocker build -t localhost/ndpresponder 'github.com/oneclickvirt/ndpresponder#main'\ndocker run -d --name ndpresponder --network host localhost/ndpresponder [arguments]\n```\n\n## Static Mode\n\nThe program can respond to neighbor solicitations for any address within one or more subnets.\nKeep subnets as small as possible.\n\n```bash\nsudo ndpresponder -n 2001:db8:3988:486e:ff2f:add3:31e3:7b00/120\n```\n\n* `-i` optionally specifies the uplink network interface name. The default value is `auto`, which selects the interface from the IPv6 default route and falls back to scanning usable interfaces.\n* `-n` specifies the IPv6 subnet to respond to. Repeat to add multiple subnets.\n\nSee [ndpresponder.service](ndpresponder.service) for a sample systemd unit file.\n\n## Docker Network Mode\n\nThe program can respond to neighbor solicitations for addresses assigned in Docker networks.\nWhen a container connects to a network, it notifies the gateway router of the new address.\n\n```bash\ndocker network create --ipv6 --subnet=172.26.0.0/16 \\\n  --subnet=2001:db8:1972:beb0:dce3:9c1a:d150::/112 ipv6exposed\n\ndocker run -d \\\n  --restart always --cpus 0.02 --memory 64M \\\n  -v /var/run/docker.sock:/var/run/docker.sock:ro \\\n  --cap-drop=ALL --cap-add=NET_RAW --cap-add=NET_ADMIN \\\n  --network host --name ndpresponder \\\n  localhost/ndpresponder -N ipv6exposed\n```\n\n* `-i` optionally specifies the uplink network interface name. The default value is `auto`, which avoids assuming that the host interface is named `eth0`.\n* `-N` specifies the Docker network name. Repeat to add multiple networks.\n\n## Other Options\n\nSet the `NDPRESPONDER_LOG` environment variable to change the log level.\nAcceptable values: `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`.\n\n```bash\nsudo NDPRESPONDER_LOG=WARN ndpresponder [arguments]\ndocker run -e NDPRESPONDER_LOG=WARN [other arguments]\n```\n\n## Acknowledgements\n\nThis project is based on the original work by [yoursunny/ndpresponder](https://github.com/yoursunny/ndpresponder). Thanks for the great foundation.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneclickvirt%2Fndpresponder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foneclickvirt%2Fndpresponder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneclickvirt%2Fndpresponder/lists"}