Created
July 3, 2022 06:20
-
-
Save efjacobson/36778f147353f8cbdce25c944fbdefa3 to your computer and use it in GitHub Desktop.
OpenWRT /etc/rc.local
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
echo "begin /etc/rc.local" | |
echo "" | |
DRY_RUN=0 | |
for opt in "$@" | |
do | |
case ${opt} in | |
--dry-run) | |
DRY_RUN=1 | |
;; | |
esac | |
done | |
if [[ "$DRY_RUN" == 1 ]]; then | |
echo "dry run" | |
echo "" | |
fi | |
log_execute() { | |
OIFS="$IFS" | |
IFS=$'\n' | |
echo "$1" | |
echo "" | |
for i in $1; do | |
eval "$i" | |
done | |
echo "###########################################################################################" | |
echo "" | |
IFS=$OIFS | |
} | |
add_list_dns() { | |
interface="$1" | |
set -- '1.1.1.1' '1.0.0.1' '8.8.8.8' '8.8.4.4' | |
for i; do | |
uci add_list network."$interface".dns="$i" | |
done | |
} | |
add_list_icmp_type() { | |
rule="$1" | |
shift | |
for i in "$@" | |
do | |
uci add_list firewall."$rule".icmp_type="$i" | |
done | |
} | |
clear_section() { | |
section="$1" | |
OIFS="$IFS" | |
IFS=$'\n' | |
showResults=`uci show "$section"` | |
while [[ "$showResults" ]]; do | |
for i in $showResults; do | |
item="${i/$section./}" | |
item=`echo "$item" | sed "s/[.=].\+//"` | |
uci -q delete "$section"."$item" | |
done | |
showResults=`uci show "$section"` | |
done | |
IFS=$OIFS | |
} | |
clear_section "network" | |
clear_section "firewall" | |
clear_section "wireless" | |
RADIO_DEVICES=`find / -type d -name '*.pci'` | |
PHY_0=`find /sys/devices/ -type d -name 'phy0'` | |
PHY_1=`find /sys/devices/ -type d -name 'phy1'` | |
RADIO_0_PATH="${PHY_0/\/sys\/devices\/platform\//}" | |
RADIO_0_PATH="${RADIO_0_PATH/\/ieee80211\/phy0/}" | |
RADIO_1_PATH="${PHY_1/\/sys\/devices\/platform\//}" | |
RADIO_1_PATH="${RADIO_1_PATH/\/ieee80211\/phy1/}" | |
########################################################################################### | |
cmd=`cat <<EOI | |
uci set wireless.radio0=wifi-device | |
uci set wireless.radio0.cell_density='0' | |
uci set wireless.radio0.channel='36' | |
uci set wireless.radio0.htmode='VHT80' | |
uci set wireless.radio0.hwmode='11a' | |
uci set wireless.radio0.path="$RADIO_0_PATH" | |
uci set wireless.radio0.type='mac80211' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set wireless.default_radio0=wifi-iface | |
uci set wireless.default_radio0.device='radio0' | |
uci set wireless.default_radio0.encryption='psk2' | |
uci set wireless.default_radio0.key='redacted' | |
uci set wireless.default_radio0.mode='ap' | |
uci set wireless.default_radio0.network='lan' | |
uci set wireless.default_radio0.ssid='openwrt-5.0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set wireless.default_radio01=wifi-iface | |
uci set wireless.default_radio01.device='radio0' | |
uci set wireless.default_radio01.mode='ap' | |
uci set wireless.default_radio01.network='lan_1' | |
uci set wireless.default_radio01.ssid='openwrt-5.0-dev' | |
uci set wireless.default_radio01.encryption='psk2' | |
uci set wireless.default_radio01.key='redacted' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set wireless.radio1=wifi-device | |
uci set wireless.radio1.cell_density='0' | |
uci set wireless.radio1.channel='11' | |
uci set wireless.radio1.htmode='HT20' | |
uci set wireless.radio1.hwmode='11g' | |
uci set wireless.radio1.path="$RADIO_1_PATH" | |
uci set wireless.radio1.type='mac80211' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set wireless.default_radio1=wifi-iface | |
uci set wireless.default_radio1.device='radio1' | |
uci set wireless.default_radio1.encryption='psk2' | |
uci set wireless.default_radio1.key='redacted' | |
uci set wireless.default_radio1.mode='ap' | |
uci set wireless.default_radio1.network='lan' | |
uci set wireless.default_radio1.ssid='openwrt-2.4' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set wireless.default_radio11=wifi-iface | |
uci set wireless.default_radio11.device='radio1' | |
uci set wireless.default_radio11.encryption='psk2' | |
uci set wireless.default_radio11.key='redacted' | |
uci set wireless.default_radio11.mode='ap' | |
uci set wireless.default_radio11.network='lan_1' | |
uci set wireless.default_radio11.ssid='openwrt-2.4-dev' | |
EOI` | |
log_execute "$cmd" | |
########################################################################################### | |
cmd=`cat <<EOI | |
uci set network.loopback=interface | |
uci set network.loopback.device='lo' | |
uci set network.loopback.ipaddr='127.0.0.1' | |
uci set network.loopback.netmask='255.0.0.0' | |
uci set network.loopback.proto='static' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set network.globals=globals | |
uci set network.globals.ula_prefix='fd34:1494:66ce::/48' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='lan' | |
uci set network.@device[-1].ipv6='0' | |
uci set network.@device[-1].ports='eth1.1' | |
uci set network.@device[-1].type='bridge' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='lan_1' | |
uci set network.@device[-1].ipv6='0' | |
uci set network.@device[-1].ports='eth1.1' | |
uci set network.@device[-1].type='bridge' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='eth0' | |
uci set network.@device[-1].ipv6='0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='eth0.2' | |
uci set network.@device[-1].ifname='eth0' | |
uci set network.@device[-1].ipv6='0' | |
uci set network.@device[-1].type='8021q' | |
uci set network.@device[-1].vid='2' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='eth1' | |
uci set network.@device[-1].ipv6='0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='eth1.1' | |
uci set network.@device[-1].ifname='eth1' | |
uci set network.@device[-1].ipv6='0' | |
uci set network.@device[-1].type='8021q' | |
uci set network.@device[-1].vid='1' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='wlan0' | |
uci set network.@device[-1].ipv6='0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='wlan0-1' | |
uci set network.@device[-1].ipv6='0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='wlan1' | |
uci set network.@device[-1].ipv6='0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network device > /dev/null | |
uci set network.@device[-1].name='wlan1-1' | |
uci set network.@device[-1].ipv6='0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set network.lan=interface | |
uci set network.lan.device='lan' | |
uci set network.lan.ipaddr='192.168.1.1' | |
uci set network.lan.netmask='255.255.255.0' | |
uci set network.lan.proto='static' | |
add_list_dns "lan" | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set network.lan_1=interface | |
uci set network.lan_1.device='lan_1' | |
uci set network.lan_1.ipaddr='192.168.2.1' | |
uci set network.lan_1.netmask='255.255.255.0' | |
uci set network.lan_1.proto='static' | |
add_list_dns "lan_1" | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set network.wan_0=interface | |
uci set network.wan_0.device='eth0.2' | |
uci set network.wan_0.peerdns='0' | |
uci set network.wan_0.proto='dhcp' | |
uci set network.wan_0.type='bridge' | |
add_list_dns "wan_0" | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set network.wan_1=interface | |
uci set network.wan_1.device='eth0.2' | |
uci set network.wan_1.peerdns='0' | |
uci set network.wan_1.proto='dhcp' | |
uci set network.wan_1.type='bridge' | |
add_list_dns "wan_1" | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network switch > /dev/null | |
uci set network.@switch[-1]=switch | |
uci set network.@switch[-1].name='switch0' | |
uci set network.@switch[-1].enable_vlan='1' | |
uci set network.@switch[-1].reset='1' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network switch_vlan > /dev/null | |
uci set network.@switch_vlan[-1]=switch_vlan | |
uci set network.@switch_vlan[-1].device='switch0' | |
uci set network.@switch_vlan[-1].ports='1 2 3 4 6t' | |
uci set network.@switch_vlan[-1].vlan='1' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add network switch_vlan > /dev/null | |
uci set network.@switch_vlan[-1]=switch_vlan | |
uci set network.@switch_vlan[-1].device='switch0' | |
uci set network.@switch_vlan[-1].ports='5 0t' | |
uci set network.@switch_vlan[-1].vlan='2' | |
EOI` | |
log_execute "$cmd" | |
########################################################################################### | |
cmd=`cat <<EOI | |
uci add firewall defaults > /dev/null | |
uci set firewall.@defaults[-1].synflood_protect='1' | |
uci set firewall.@defaults[-1].input='ACCEPT' | |
uci set firewall.@defaults[-1].output='ACCEPT' | |
uci set firewall.@defaults[-1].forward='REJECT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall include > /dev/null | |
uci set firewall.@include[-1].path='/etc/firewall.user' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall zone > /dev/null | |
uci set firewall.@zone[-1]=zone | |
uci set firewall.@zone[-1].name='lan' | |
uci set firewall.@zone[-1].network='lan' | |
uci set firewall.@zone[-1].input='ACCEPT' | |
uci set firewall.@zone[-1].output='ACCEPT' | |
uci set firewall.@zone[-1].forward='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall zone > /dev/null | |
uci set firewall.@zone[-1]=zone | |
uci set firewall.@zone[-1].name='wan_0' | |
uci set firewall.@zone[-1].masq='1' | |
uci set firewall.@zone[-1].mtu_fix='1' | |
uci set firewall.@zone[-1].network='wan_0' | |
uci set firewall.@zone[-1].input='REJECT' | |
uci set firewall.@zone[-1].output='ACCEPT' | |
uci set firewall.@zone[-1].forward='REJECT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-DHCP-Renew' | |
uci set firewall.@rule[-1].dest_port='68' | |
uci set firewall.@rule[-1].family='ipv4' | |
uci set firewall.@rule[-1].proto='udp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-Ping' | |
uci set firewall.@rule[-1].family='ipv4' | |
uci set firewall.@rule[-1].icmp_type='echo-request' | |
uci set firewall.@rule[-1].proto='icmp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-IGMP' | |
uci set firewall.@rule[-1].family='ipv4' | |
uci set firewall.@rule[-1].proto='igmp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-DHCPv6' | |
uci set firewall.@rule[-1].dest_ip='fc00::/6' | |
uci set firewall.@rule[-1].dest_port='546' | |
uci set firewall.@rule[-1].enabled='0' | |
uci set firewall.@rule[-1].family='ipv6' | |
uci set firewall.@rule[-1].proto='udp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].src_ip='fc00::/6' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-MLD' | |
uci set firewall.@rule[-1].enabled='0' | |
uci set firewall.@rule[-1].family='ipv6' | |
uci set firewall.@rule[-1].proto='icmp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].src_ip='fe80::/10' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
add_list_icmp_type "@rule[-1]" '130/0' '131/0' '132/0' '143/0' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-ICMPv6-Input' | |
uci set firewall.@rule[-1].enabled='0' | |
uci set firewall.@rule[-1].family='ipv6' | |
uci set firewall.@rule[-1].limit='1000/sec' | |
uci set firewall.@rule[-1].proto='icmp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
add_list_icmp_type "@rule[-1]" 'echo-request' 'echo-reply' 'destination-unreachable' 'packet-too-big' 'time-exceeded' 'bad-header' 'unknown-header-type' 'router-solicitation' 'neighbour-solicitation' 'router-advertisement' 'neighbour-advertisement' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-ICMPv6-Forward' | |
uci set firewall.@rule[-1].dest='*' | |
uci set firewall.@rule[-1].enabled='0' | |
uci set firewall.@rule[-1].family='ipv6' | |
uci set firewall.@rule[-1].limit='1000/sec' | |
uci set firewall.@rule[-1].proto='icmp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
add_list_icmp_type "@rule[-1]" 'echo-request' 'echo-reply' 'destination-unreachable' 'packet-too-big' 'time-exceeded' 'bad-header' 'unknown-header-type' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-IPSec-ESP' | |
uci set firewall.@rule[-1].dest='lan' | |
uci set firewall.@rule[-1].family='ipv4' | |
uci set firewall.@rule[-1].proto='esp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall rule > /dev/null | |
uci set firewall.@rule[-1].name='Allow-ISAKMP' | |
uci set firewall.@rule[-1].dest='lan' | |
uci set firewall.@rule[-1].dest_port='500' | |
uci set firewall.@rule[-1].family='ipv4' | |
uci set firewall.@rule[-1].proto='udp' | |
uci set firewall.@rule[-1].src='wan_0' | |
uci set firewall.@rule[-1].target='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci add firewall forwarding > /dev/null | |
uci set firewall.@forwarding[-1].dest='wan_0' | |
uci set firewall.@forwarding[-1].src='lan' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set firewall.lan_1=zone | |
uci set firewall.lan_1.name='lan_1' | |
uci set firewall.lan_1.network='lan_1' | |
uci set firewall.lan_1.input='ACCEPT' | |
uci set firewall.lan_1.output='ACCEPT' | |
uci set firewall.lan_1.forward='ACCEPT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set firewall.wan_1=zone | |
uci set firewall.wan_1.name='wan_1' | |
uci set firewall.wan_1.network='wan_1' | |
uci set firewall.wan_1.input='REJECT' | |
uci set firewall.wan_1.output='ACCEPT' | |
uci set firewall.wan_1.forward='REJECT' | |
EOI` | |
log_execute "$cmd" | |
cmd=`cat <<EOI | |
uci set firewall.wtf_forwarding=forwarding | |
uci set firewall.wtf_forwarding.dest='wan_1' | |
uci set firewall.wtf_forwarding.src='lan_1' | |
EOI` | |
log_execute "$cmd" | |
########################################################################################### | |
uci changes | |
echo "" | |
if [[ "$DRY_RUN" == 1 ]]; then | |
echo "dry run" | |
echo "" | |
else | |
uci commit | |
wifi reload | |
/etc/init.d/network restart | |
/etc/init.d/firewall restart | |
echo "" | |
fi | |
echo "end /etc/rc.local" | |
echo "" | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment