167 lines
4.5 KiB
Bash
Executable File
167 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# https://raspberrypi.stackexchange.com/questions/88954/workaround-for-a-wifi-bridge-on-a-raspberry-pi-with-proxy-arp
|
|
# https://www.willhaley.com/blog/raspberry-pi-wifi-ethernet-bridge/
|
|
|
|
# ==============================================================================
|
|
# Config
|
|
|
|
SOURCE=${BASH_SOURCE[0]}
|
|
while [ -L "$SOURCE" ]; do
|
|
DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
|
SOURCE=$(readlink "$SOURCE")
|
|
[[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE
|
|
done
|
|
DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
|
|
|
if [[ -f "$DIR/config/config.sh" ]]; then
|
|
source "$DIR/config/config.sh"
|
|
else
|
|
echo "$DIR/config/config.sh missing!"
|
|
exit 1
|
|
fi
|
|
|
|
# ==============================================================================
|
|
# Setup
|
|
|
|
# Must be run as root
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo 'This script must be run as root.' >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Reset interfaces
|
|
iptables -X
|
|
iptables -F
|
|
iptables -t nat -X
|
|
iptables -t nat -F
|
|
echo "Cleared iptables"
|
|
|
|
ifconfig $WLAN_IFACE down
|
|
ifconfig $WLAN_IFACE hw ether $(ethtool -P $WLAN_IFACE | awk '{print $3}')
|
|
ifconfig $WLAN_IFACE up
|
|
echo "Reset $WLAN_IFACE"
|
|
|
|
while true; do
|
|
WLAN_IFACE_IP=$(ip -4 -br addr show $WLAN_IFACE | grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")
|
|
if [ -n "${WLAN_IFACE_IP}" ]; then
|
|
echo "Got it!"
|
|
break
|
|
fi
|
|
echo "Waiting for $WLAN_IFACE to get an IP..."
|
|
sleep 5
|
|
done
|
|
|
|
# We only need to get the $WLAN_IFACE IP address and will copy it over to $ETH_IFACE later
|
|
WLAN_NETMASK=$(ip addr show $WLAN_IFACE | grep -w inet | awk '{print $2}' | cut -d'/' -f2)
|
|
WLAN_NETMASK_CIDR=$(ip addr show $WLAN_IFACE | grep -w inet | awk '{print $2}' | cut -d'/' -f2)
|
|
|
|
if $NON_INTERACTIVE; then
|
|
NON_INTERACTIVE_APT="-y"
|
|
else
|
|
NON_INTERACTIVE_APT=""
|
|
fi
|
|
|
|
# ==============================================================================
|
|
# Install stuff
|
|
|
|
echo -e "\n# INSTALL THINGS #"
|
|
|
|
echo -e "Updating...\n\n"
|
|
|
|
service systemd-resolved start
|
|
sudo systemctl stop dnsmasq
|
|
apt-get update
|
|
apt-get upgrade $NON_INTERACTIVE_APT
|
|
|
|
echo -e "\n"
|
|
|
|
THINGS_TO_INSTALL="parprouted dhcp-helper net-tools ethtool dnsmasq"
|
|
|
|
if ! $NON_INTERACTIVE; then
|
|
echo "Going to install: $THINGS_TO_INSTALL"
|
|
read -p "Press ENTER to continue or CTRL+C to cancel..."
|
|
fi
|
|
|
|
echo -e "\n"
|
|
|
|
apt-get install $NON_INTERACTIVE_APT $THINGS_TO_INSTALL
|
|
|
|
echo -e "\n\nSetting up services...\n"
|
|
|
|
systemctl stop dhcp-helper
|
|
systemctl disable dhcp-helper # remember to enable it later
|
|
sudo systemctl stop dnsmasq
|
|
sudo systemctl disable dnsmasq
|
|
|
|
if ! $NON_INTERACTIVE; then
|
|
echo -e "\n\nGoing to replace networking with systemd-networkd."
|
|
read -p "Press ENTER to continue or CTRL+C to cancel..."
|
|
fi
|
|
|
|
echo -e "\n"
|
|
apt-get --autoremove $NON_INTERACTIVE_APT purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
|
|
|
|
echo -e "\n\nConnecting to WiFi..."
|
|
|
|
WPA_SUPP_FILE="/etc/wpa_supplicant/wpa_supplicant-$WLAN_IFACE.conf"
|
|
cat >"$WPA_SUPP_FILE" <<EOF
|
|
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
|
|
update_config=1
|
|
country=USifconfig $WLAN_IFACE
|
|
network={
|
|
ssid="$WIFI_SSID"
|
|
scan_ssid=1
|
|
key_mgmt=WPA-EAP
|
|
eap=PEAP
|
|
identity="$WIFI_USERNAME"
|
|
password="$WIFI_PWD"
|
|
phase1="peaplabel=0"
|
|
phase2="auth=MSCHAPV2"
|
|
}
|
|
EOF
|
|
chmod 600 "$WPA_SUPP_FILE"
|
|
echo "Created wpa_supplicant: $WPA_SUPP_FILE"
|
|
systemctl disable wpa_supplicant.service
|
|
systemctl stop wpa_supplicant.service
|
|
systemctl enable --now wpa_supplicant@$WLAN_IFACE.service
|
|
systemctl status --no-pager wpa_supplicant@$WLAN_IFACE.service
|
|
echo ""
|
|
ifconfig $WLAN_IFACE
|
|
|
|
echo -e "\n\n"
|
|
ifconfig $WLAN_IFACE
|
|
NET_CONF_FILE="/etc/systemd/network/08-$WLAN_IFACE.network"
|
|
cat >"$NET_CONF_FILE" <<EOF
|
|
[Match]
|
|
Name=$WLAN_IFACE
|
|
[Network]
|
|
IPForward=yes
|
|
DHCP=yes
|
|
# for a static ip address, remove DHCP=yes and modify the following lines:
|
|
#Address=192.168.50.2/24
|
|
#Gateway=192.168.50.1
|
|
#DNS=84.200.69.80 1.1.1.1
|
|
EOF
|
|
echo "Created network config: $WLAN_IFACE"
|
|
echo -e "Finishing systemd-networkd install...\n\n"
|
|
apt-get install $NON_INTERACTIVE_APT libnss-resolve
|
|
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
|
|
systemctl enable --now systemd-resolved.service
|
|
systemctl restart systemd-networkd.service
|
|
|
|
echo -e "\n\nInstall complete! Ignore any service errors for now..."
|
|
|
|
# ==============================================================================
|
|
# Set up configs
|
|
|
|
echo -e "\n# SET UP CONFIG FILES #"
|
|
|
|
sed -i'' 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
|
|
sysctl -p /etc/sysctl.conf
|
|
echo "Set net.ipv4.ip_forward=1 in /etc/sysctl.conf"
|
|
|
|
mkdir -p /var/lib/dnsmasq/
|
|
echo "Created /var/lib/dnsmasq/"
|
|
|
|
echo -e "\n\n\n==============\nDone!\nNow reboot!"
|