* Corrected Freifunk NAT rules
[project/luci.git] / module / admin-core / contrib / init.d / luci_freifunk
1 #!/bin/sh /etc/rc.common
2 START=70
3
4 start() {
5 include /lib/network
6 scan_interfaces
7
8
9 ### Read interface names
10 config_get wanif wan ifname
11 config_get lanif lan ifname
12 config_get ffif ff ifname
13
14
15 [ -n "$ffif" ] || return 0
16
17
18 ### Read from config
19 config_load freifunk
20
21 config_get_bool internal routing internal
22 [ -n "$wanif" ] && config_get_bool internet routing internal
23
24
25 ### Freifunk to Freifunk
26 [ "$internal" -gt 0 ] && {
27 iptables -A forwarding_rule -i "$ffif" -o "$ffif" -j ACCEPT
28 }
29
30 ### Lan to Freifunk
31 [ -n "$lanif" ] && {
32 config_get ipaddr lan ipaddr
33 config_get netmask lan netmask
34
35 eval "$(ipcalc.sh $ipaddr $netmask)"
36
37 iptables -A forwarding_rule -i "$lanif" -o "$ffif" -j ACCEPT
38 iptables -t nat -A postrouting_rule -s "$NETWORK/$PREFIX" -o "$ffif" -j MASQUERADE
39 }
40
41 ### Freifunk to Wan
42 [ "$internet" -gt 0 ] && {
43 config_get ipaddr ff ipaddr
44 config_get netmask ff netmask
45
46 eval "$(ipcalc.sh $ipaddr $netmask)"
47
48 iptables -A forwarding_rule -i "$ffif" -o "$wanif" -j ACCEPT
49 iptables -t nat -A postrouting_rule -s "$NETWORK/$PREFIX" -o "$wanif" -j MASQUERADE
50 }
51 }
52
53 stop() {
54 include /lib/network
55 scan_interfaces
56
57 ### Read interface names
58 config_get wanif wan ifname
59 config_get lanif lan ifname
60 config_get ffif ff ifname
61
62 [ -n "$ffif" ] || return 0
63
64 ### Freifunk to Freifunk
65 iptables -D forwarding_rule -i "$ffif" -o "$ffif" -j ACCEPT
66
67 ### Lan to Freifunk
68 [ -n "$lanif" ] && {
69 iptables -D forwarding_rule -i "$lanif" -o "$ffif" -j ACCEPT
70 iptables -t nat -D postrouting_rule -i "$lanif" -o "$ffif" -j MASQUERADE
71 }
72
73 ### Freifunk to Wan
74 [ -n "$wanif" -gt 0 ] && {
75 iptables -D forwarding_rule -i "$ffif" -o "$wanif" -j ACCEPT
76 iptables -t nat -D postrouting_rule -i "$ffif" -o "$wanif" -j MASQUERADE
77 }
78 }