{"id":15373032,"url":"https://github.com/vi/ipv6proxy","last_synced_at":"2025-07-08T10:37:38.144Z","repository":{"id":137140108,"uuid":"21295478","full_name":"vi/ipv6proxy","owner":"vi","description":"IPv6 router advertisment and neighbour discovery proxy for simple bridge-like extensions of /64 networks.","archived":false,"fork":false,"pushed_at":"2022-08-03T20:46:02.000Z","size":37,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-15T14:13:43.762Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vi.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}},"created_at":"2014-06-28T03:44:44.000Z","updated_at":"2023-01-03T15:39:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"d4d3d1c4-562a-401b-a3af-f727f5a3a247","html_url":"https://github.com/vi/ipv6proxy","commit_stats":{"total_commits":34,"total_committers":1,"mean_commits":34.0,"dds":0.0,"last_synced_commit":"61b3f4f803614fa1189416d0caca0db6c4e216c7"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fipv6proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fipv6proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fipv6proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fipv6proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vi","download_url":"https://codeload.github.com/vi/ipv6proxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249085429,"owners_count":21210267,"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","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-01T13:54:08.112Z","updated_at":"2025-04-15T14:14:06.514Z","avatar_url":"https://github.com/vi.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"ipv6proxy - IPv6 network NDP proxy router; `/64` network extender\n\nRationale\n---\nImagine you have `/64` IPv6 network based on auto-configuration.\nYou can extend it using switches and bridges, but putting a router that splits `/64` further, interfering with address auto-configuration.\n\nBut making a bridge can be disrupting. Also bridging Wi-Fi in Linux can be problematic.\n\nThis program sets up a tricky router mode, like a \"bridgeless bridge\", proxying NDP and other ICMPv6 things and ensuring only one source MAC address is in use.\n\nUsage\n---\n\nImagine you have working `eth0` with auto-configured IPv6. You want to extend it to `wlan0`.\n\n    IPV6PROXY_DEBUG=ism ./ipv6proxy eth0 wlan0 \n\nThis command with start ipv6proxy in default mode (it will set up `forwarding` and `accept_ra` values if necessary).\nUpon terminationg ipv6proxy tries to revert everything back.\n\nIPV6PROXY_DEBUG is only for making it to print more messages.\n\nWhat the program does\n---\nIt listens for ICMPv6 on all specified interfaces and each ICMPv6 packet it does see to all other interfaces, changing source and destination MAC addresses as necessary.\nAdditionally, special `/128` routes get added as necessary.\n\nNon-ICMPv6 traffic gets forwarded by Linux as usual.\n\nSupposing you have already working auto-configured setup at `eth0` and one remote node waiting to be configured at `wlan0`, ipv6proxy should print something like this, if started by command line above:\n\n\n```\n+ echo 2 \u003e /proc/sys/net/ipv6/conf/eth0/accept_ra\n    (Force eth0 to stay auto-configured even though becoming a router)\n+ echo 1 \u003e /proc/sys/net/ipv6/conf/eth0/forwarding\n    (Turn on forwarding)\n+ ip link set eth0 allmulticast on\n    (Turn on allmulticast mode)\n+ echo 1 \u003e /proc/sys/net/ipv6/conf/wlan0/forwarding\n+ ip link set wlan0 allmulticast on\n    (if accept_ra is 0, it is not changed by ipv6proxy)\nFE8000000000000000C50AFFFEC19433:02C50AC19433 -\u003e FF020000000000000000000000000001:333300000001 eth0(RouAdv)\nAdding entry: FE8000000000000000C50AFFFEC19433 at eth0 mac 02C50AC19433\n    (ipv6proxy saw a router advertisment on eth0 and forwarded it to wlan0)\n    (   ,from the appropriate MAC address instead of 02C50AC19433)\n00000000000000000000000000000000:FEC9D280DFA5 -\u003e FF0200000000000000000001FF80DFA5:3333FF80DFA5 wlan0(NeigSol)\nAdding entry: 00000000000000000000000000000000 at wlan0 mac FEC9D280DFA5\n    (the node at wlan0 is booting up IPv6, checking for address duplicates)\nFE8000000000000000C50AFFFEC19433:02C50AC19433 -\u003e FF0200000000000000000001FF80DFA5:3333FF80DFA5 eth0(NeigSol)\nFE8000000000000000C50AFFFEC19433:02C50AC19433 -\u003e FF0200000000000000000001FF80DFA5:3333FF80DFA5 eth0(NeigSol)\n200104707BD6E106FCC9D2FFFE80DFA5:FEC9D280DFA5 -\u003e FE8000000000000000C50AFFFEC19433:5ACACAD9D63D wlan0(NeighAdv)\nAdding entry: 200104707BD6E106FCC9D2FFFE80DFA5 at wlan0 mac FEC9D280DFA5\n+ ip -6 route add 2001:0470:7bd6:e106:fcc9:d2ff:fe80:dfa5/128 dev veth_cm metric 5\n    (the node have chosen the address, and we have added a route for it)\n    (The node should have now IPv6 connectivity and be reachable from outside)\n```\n\nPrototype of the program: [setup_ipv6_hacky_router.sh](https://gist.github.com/vi/9633572)\n\nHacks\n---\nThe project is eary and hacky. There are following known problems:\n\n* Ping replies get duplicated;\n* Source MAC address substitution code is hacky. Some special source MAC addresses may fail (it does search\u0026replace MAC mentions though the whole packet and fix up ICMPv6 checksum afterwards).\n* Usage of shell and /bin/ip to manage routes instead of AF_NETLINK;\n* Not scalable approach in general - by design.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fipv6proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvi%2Fipv6proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fipv6proxy/lists"}