Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ffbs-parker-nextnode #139

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions ffbs-parker-nextnode/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=ffbs-parker-nextnode
PKG_VERSION:=1

PKG_MAINTAINER:=Chris Fiege <[email protected]>
PKG_LICENSE:=MIT

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/ffbs-parker-nextnode
TITLE:=gluon-nextnode config for parker
endef

define Package/ffbs-parker-nextnode/description
This package adds ebatables rules for the parker nextnode range.
This package is needed when the nextnode-ips are outside of the
local net of the router - what is usually the case for parker networks.
endef

define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
endef

define Build/Configure
endef

define Build/Compile
endef

define Package/ffbs-parker-nextnode/install
$(CP) ./files/* $(1)/
endef

$(eval $(call BuildPackage,ffbs-parker-nextnode))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe use BuildGluonPackage here


38 changes: 38 additions & 0 deletions ffbs-parker-nextnode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
ffbs-parker-nextnode
====================

This is a package of [gluon-parker](https://github.com/ffbs/gluon-parker),
a Gluon fork that uses routing between the nodes
(aka. Router devices) and the infrastructure.
It is currently in use at Freifunk Braunschweig.
Other communities are interested in adopting it as well.

This package provides `ebtables`-rules that redirect traffic to the
`localnode` IPs on the node itself.

This is needed in networks where the `localnode` addresses are outside the client network - for example when
using with `parker`.

In Freifunk Braunschweig, for example, the `localnode` address is `2001:bf7:382:0::1`.
But the IP addresses of routers and clients are in `2001:bf7:381::`.
With this rule traffic to the `localnode` address is always forwarded to the router.

(The service on the router should redirect the client to one of routers public addresses - otherwise the TCP connection
would break when the client roams to another node with the same redirect.)

site.conf
---------

Your `site.conf` probably already contains a `next_node` section, as
requested by the [documentation](https://gluon.readthedocs.io/en/latest/user/site.html).

For Freifunk Braunschweig this section look like this:

```json
next_node = {
ip4 = "172.16.127.1",
ip6 = "2001:bf7:382:0::1",
name = { "node.ffbs" },
mac = "72:02:46:6a:1c:27",
},
```
12 changes: 12 additions & 0 deletions ffbs-parker-nextnode/files/lib/gluon/ebtables/399-localnode
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
local client_bridge = require 'gluon.client_bridge'
local site = require 'gluon.site'
local next_node = site.next_node({})
local macaddr = client_bridge.next_node_macaddr()

if next_node.ip4 then
rule('PREROUTING -p IPv4 -d ! ' .. macaddr .. ' --ip-dst ' .. site.next_node.ip4() .. ' -j dnat --to-dst ' .. macaddr .. ' --dnat-target ACCEPT', 'nat')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the usage of next_node.ip4 and site.next_node.ip4() intentional? Same for ip6.

end

if next_node.ip6 then
rule('PREROUTING -p IPv6 -d ! ' .. macaddr .. ' --ip6-dst ' .. site.next_node.ip6() .. ' -j dnat --to-dst ' .. macaddr .. ' --dnat-target ACCEPT', 'nat')
end
Loading