Skip to content

Instantly share code, notes, and snippets.

@efjacobson
Created July 3, 2022 06:20
Show Gist options
  • Save efjacobson/36778f147353f8cbdce25c944fbdefa3 to your computer and use it in GitHub Desktop.
Save efjacobson/36778f147353f8cbdce25c944fbdefa3 to your computer and use it in GitHub Desktop.
OpenWRT /etc/rc.local
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