[PATCH 1/7] fff: advertise fdff:0::/64 to access web interface

mayosemmel mayosemmel at googlemail.com
Mo Jan 18 00:14:57 CET 2016


Hi,

ich hab nochmal in bisschen gespielt und da ist mir noch was
aufgefallen, siehe unten.

Am Mittwoch, den 06.01.2016, 18:39 +0100 schrieb Tim Niemeyer:
> This patch adds a prefix advertisment for each node. Every node get also
> the IPs
> * $prefix::MAC
> * $prefix::link-local
> * $prefix::1
> 
> ::1 is duplicated so we need filtering to not forward data into the
> network for ::1.
> 
> Signed-off-by: Tim Niemeyer <tim.niemeyer at mastersword.de>
> ---
> 
>  bsp/default/root_file_system/etc/firewall.user     | 21 ++++++++++++
>  bsp/default/root_file_system/etc/network.sh        | 38 ++++++++++++++++++++++
>  src/packages/fff/fff/Makefile                      |  4 +--
>  .../fff/fff/files/etc/uci-defaults/localdhcp       | 18 ++++++++++
>  4 files changed, 79 insertions(+), 2 deletions(-)
>  create mode 100644 src/packages/fff/fff/files/etc/uci-defaults/localdhcp
> 
> diff --git a/bsp/default/root_file_system/etc/firewall.user b/bsp/default/root_file_system/etc/firewall.user
> index 1af101c..7bcf82d 100755
> --- a/bsp/default/root_file_system/etc/firewall.user
> +++ b/bsp/default/root_file_system/etc/firewall.user
> @@ -59,6 +59,15 @@ ebtables -A MULTICAST_OUT -p IPv4 --ip-proto igmp -j RETURN
>  ######## INPUT ############
>  ebtables -P INPUT ACCEPT
>  
> +# Erlaube dhcpv6 request / router solicitation von client zu knoten
> +ebtables -A INPUT -p IPv6 -i ! bat0 --ip6-proto udp --ip6-dport 547 -j ACCEPT
> +ebtables -A INPUT -p IPv6 -i ! bat0 --ip6-proto ipv6-icmp --ip6-icmp-type router-solicitation -j ACCEPT
> +ebtables -A INPUT -d Multicast --logical-in br-mesh -i ! bat0 -j ACCEPT
> +
> +# No input from/to local node ip from batman
> +ebtables -A INPUT --logical-in br-mesh -i bat0 -p IPv6 --ip6-source fdff::1/128 -j DROP
> +ebtables -A INPUT --logical-in br-mesh -i bat0 -p IPv6 --ip6-destination fdff::1/128 -j DROP
> +
>  # Erlaube nur DHCP Antworten von BATMAN -> KNOTEN
>  ebtables -A INPUT -p IPv4 --ip-proto udp --ip-dport 68 -j IN_ONLY
>  # Erlaube nur DHCPv6 Antworten von BATMAN -> KNOTEN
> @@ -71,6 +80,10 @@ ebtables -A INPUT -p IPv6 -i bat0 --ip6-proto ipv6-icmp --ip6-icmp-type router-s
>  ######## FORWARD ############
>  ebtables -P FORWARD ACCEPT
>  
> +# Do not forward local node ip
> +ebtables -A FORWARD --logical-out br-mesh -o bat0 -p IPv6 --ip6-destination fdff::1/128 -j DROP
> +ebtables -A FORWARD --logical-out br-mesh -o bat0 -p IPv6 --ip6-source fdff::1/128 -j DROP
> +
>  # Erlaube nur DHCP Request von CLIENT -> BATMAN
>  ebtables -A FORWARD -p IPv4 --ip-proto udp --ip-dport 67 -j OUT_ONLY
>  # Erlaube nur DHCP Antworten von BATMAN -> CLIENT
> @@ -89,6 +102,14 @@ ebtables -A FORWARD -d Multicast --logical-out br-mesh -o bat0 -j MULTICAST_OUT
>  ######## OUTPUT ############
>  ebtables -P OUTPUT ACCEPT
>  
> +# Erlaube dhcpv6 reply / router advertisment von knoten zu client
> +ebtables -A OUTPUT -p IPv6 -o ! bat0 --ip6-proto udp --ip6-dport 546 -j ACCEPT
> +ebtables -A OUTPUT -p IPv6 -o ! bat0 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j ACCEPT
> +
> +# Do not output local node ip to batman
> +ebtables -A OUTPUT --logical-out br-mesh -o bat0 -p IPv6 --ip6-destination fdff::1/128 -j DROP
> +ebtables -A OUTPUT --logical-out br-mesh -o bat0 -p IPv6 --ip6-source fdff::1/128 -j DROP
> +
>  # Erlaube nur DHCP Request von KNOTEN -> BATMAN
>  ebtables -A OUTPUT -p IPv4 --ip-proto udp --ip-dport 67 -j OUT_ONLY
>  # Erlaube nur DHCPv6 Request von KNOTEN -> BATMAN
> diff --git a/bsp/default/root_file_system/etc/network.sh b/bsp/default/root_file_system/etc/network.sh
> index 6c64083..8c99305 100644
> --- a/bsp/default/root_file_system/etc/network.sh
> +++ b/bsp/default/root_file_system/etc/network.sh
> @@ -113,3 +113,41 @@ if [[ -n "$ETH0MAC" ]]; then
>          ifconfig eth0 up
>          /etc/init.d/network restart
>  fi
> +
> +if uci get network.mesh.ip6addr
> +then
> +    echo "IPv6 for mesh is set already"
> +else
> +    # Some time needed :(
> +    sleep 5
> +
> +    for ip in $(ip -6 addr show br-mesh | awk '/fdff/{ print $2 }'); do
> +        ip -6 addr del $ip dev br-mesh
> +    done
> +
> +    prefix="fdff:0::/64"
> +    # Set $prefix::MAC as IP
> +    suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' /sys/class/net/br-mesh/address)
> +    addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
> +    ip -6 addr add $addr dev br-mesh
> +
> +    uci -q del network.globals
> +    uci -q set network.globals=globals
> +    uci -q set network.globals.ula_prefix=$prefix
> +    uci -q add_list network.mesh.ip6addr=$addr
> +    uci -q set network.mesh.proto=static
> +
> +    # Set $prefix::1 as IP
> +    suffix="1"
> +    addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
> +    ip -6 addr add $addr dev br-mesh
> +    uci -q add_list network.mesh.ip6addr=$addr
> +
> +    # Set $prefix::link-local as IP
> +    suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-mesh/address)
> +    addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
> +    ip -6 addr add $addr dev br-mesh
> +    uci -q add_list network.mesh.ip6addr=$addr
> +
> +    uci -q commit network
> +fi
> diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile
> index e29713f..d92da91 100644
> --- a/src/packages/fff/fff/Makefile
> +++ b/src/packages/fff/fff/Makefile
> @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff
>  PKG_VERSION:=0.0.1
> -PKG_RELEASE:=4
> +PKG_RELEASE:=5
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/fff
>  
> @@ -14,7 +14,7 @@ define Package/fff-base
>      DEFAULT:=y
>      TITLE:= Freifunk-Franken Base
>      URL:=http://www.freifunk-franken.de
> -    DEPENDS:=+micrond +fff-nodewatcher +fff-web
> +    DEPENDS:=+micrond +fff-nodewatcher +fff-web +odhcpd
>  endef
>  
>  define Package/fff-base/description
> diff --git a/src/packages/fff/fff/files/etc/uci-defaults/localdhcp b/src/packages/fff/fff/files/etc/uci-defaults/localdhcp
> new file mode 100644
> index 0000000..d9fdb6d
> --- /dev/null
> +++ b/src/packages/fff/fff/files/etc/uci-defaults/localdhcp
> @@ -0,0 +1,18 @@
> +#!/bin/sh
> +>/etc/config/dhcp
> +
> +uci batch <<EOF
> +set dhcp.odhcpd=odhcpd
> +set dhcp.odhcpd.maindhcp=0
> +set dhcp.odhcpd.leasefile=/tmp/hosts/odhcpd
> +set dhcp.odhcpd.leasetrigger=/usr/sbin/odhcpd-update
> +set dhcp.local=dhcp
> +set dhcp.local.interface=mesh
> +set dhcp.local.ra=server
> +set dhcp.local.dhcpv6=server
> +set dhcp.local.dhcpv4=disabled
> +set dhcp.local.ndp=disabled
> +set dhcp.local.ra_default=0
> +set dhcp.local.ra_preference=low
> +commit dhcp
> +EOF
Aus irgendwelchen Gründen, vergibt er hier auch die DHCP Option. Sowohl
der DHCP als auch der RA. Damit ist nach dem verbinden 2x DHCP
eingetragen und zwar die Link-Local Adresse.
Das hat zur Folge, dass je nachdem wie schnell der lease vom GW kommt,
kein valider DNS eingetragen ist und somit kein Internet funktioniert.
Ich konnte leider den Punkt nicht finden an dem man das abdreht.

Probiert bitte mal ob ihr das nachstellen könnt oder ob das an meinem
Router, Client oder sonst was liegt.

Grüße Jan
> -- 
> 2.1.4
> 





Mehr Informationen über die Mailingliste franken-dev