#!/bin/env bash # Toggle between client/router mode on selected network interface # Copyright (C) 2018 Pekka Helenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ######################## # Usage: # chmod +x snic.sh # and then # Wired network interface, example: # snic.sh eth0 router // Switch eth0 to router mode # snic.sh eth0 client // Switch eth0 to client mode # snic.sh wlan0 router wireless // Switch wlan0 to router (Wi-Fi hotspot) mode # snic.sh wlan0 client wireless // Switch wlan0 to client mode # snic.sh # should be used only for wireless interfaces! ######################## # This script is for network interfaces which do NOT support # simultanous Client/Router mode defined in # https://archlinux.org/index.php/software_access_point ######################## nic=${1} for niccheck in $(ls /sys/class/net); do if [[ ${nic} == ${niccheck} ]]; then nicfound= fi done if [[ ! -v nicfound ]]; then echo "No such network interface. Aborting." exit 1 fi ######################## if [[ ${2} != "router" ]] && [[ ${2} != "client" ]]; then echo "Invalid mode. Use either 'router' or 'client'. Aborting." exit 1 fi ######################## # This mode removes dynamically allocated IPv4 address from NIC interface # After that we allocate a fixed IPv4 address, defined in # /etc/vnic/vnic-.conf file. # After setting up a fixed IPv4 address # DHCP server is enabled for the NIC interface # Wired: Enable Ethernet router mode # Wireless: Enable Wi-Fi hotspot router mode # if [[ ${2} == "router" ]]; then #Do not let NetworkManager interfere our connection on this interface sudo nmcli device set ${nic} managed no 2>/dev/null sudo systemctl stop snic-dynamic@${nic} sudo systemctl restart snic-static@${nic} sudo systemctl restart snic-dhcpd4@${nic} if [[ ${3} == "wireless" ]]; then sudo systemctl restart hostapd fi fi ############### # This mode removes fixed IPv4 address from NIC interface # and reserves the interface for dynamic IPv4 retrieved # from a DHCP server # Additionally, we stop running DHCP server on the NIC interface # Wired: Enable Ethernet client mode # Wireless: Enable Wlan client mode if [[ ${2} == "client" ]]; then #Let NetworkManager handle our connection on this interface sudo nmcli device set ${nic} managed yes 2>/dev/null sudo systemctl stop snic-static@${nic} sudo systemctl restart snic-dynamic@${nic} sudo systemctl stop snic-dhcpd4@${nic} if [[ ${3} == "wireless" ]]; then sudo systemctl stop hostapd fi fi