-
-
Save Lewiscowles1986/f303d66676340d9aa3cf6ef1b672c0c9 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
if [ "$EUID" -ne 0 ] | |
then echo "Must be root" | |
exit | |
fi | |
ADAPTER="eth0" | |
# Allow overriding from eth0 by passing in a single argument | |
if [ $# -eq 1 ]; then | |
ADAPTER="$1" | |
fi | |
#Uncomment net.ipv4.ip_forward | |
sed -i -- 's/#net.ipv4.ip_forward/net.ipv4.ip_forward/g' /etc/sysctl.conf | |
#Change value of net.ipv4.ip_forward if not already 1 | |
sed -i -- 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf | |
#Activate on current system | |
echo 1 > /proc/sys/net/ipv4/ip_forward | |
iptables -t nat -A POSTROUTING -o $ADAPTER -j MASQUERADE | |
iptables -A FORWARD -i $ADAPTER -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT | |
iptables -A FORWARD -i wlan0 -o $ADAPTER -j ACCEPT |
Is it also possible to bridge two virtual interfaces from the RPi build in wifi-Chip? Like a wifi repeater but with only the built in wifi-chip.
@WebMaestroFr
This script is intended to be run within either a cron @reboot, or an init / systemD, or a post-up for an adapter. I don't think it's right to use the iptables restore or save functionality, as it could lead to problems and why I've stayed away from how this is called. The overwhelming reason for this is my belief that storing some rules to be restored could lead to some practices I don't necessarily agree with, but it does work and is quite common in internet howto guides.
@Marioheld
This script actually allows for any other interface to be bridged to onboard wifi at a software level. wlan0
is hard-coded, and only changeable via script editing; eth0
is merely a default argument. I suppose I could change this to also allow a second argument to change the source adapter.
Since my last repo' is mainly based on this couple of scripts of yours, I would like to share it with you : https://github.com/WebMaestroFr/rpi-roam-webapp. I'm pretty new to shell scripts (and command lines in general to be honest) but very curious to know what you think of this, and if it follows what you consider good practice.
Awesome, thanks, I'll check it out and leave issues or PR's if I find anything I think could change
@Lewiscowles1986 i realy would like to thank you for this script. I am trying to create a captive portal since may 22(almos ten days working). I followed every tutorial i found and i could't made it works. I faced a lot of trouble and i was able to passthrough everithing but the internet connection. I was able to see and connect in my network, but no internet connection. I decided to separate things and first try to create a simple hotspot router. I faced the same thing on every place i went, every tutorial i followed and now is the first time i got abble to connect and use the internet with some device. My notebook couldn't connect, but my cellphone did. I am so happy. Thank you so much for this script, it was a light for me. Now i can try the captive portal again. Thank you one more time.
Hi @Lewiscowles1986, I used your excellent script to turn my Raspberry Pi 3 into an access point. I've just tried to add this adapter-passthrough script to sudo crontab -e
as a @reboot
script as you suggested, but I'm not getting any love. In fact if I run ifconfig
eth0 isn't even listed as an interface.
My /etc/network/interfaces
file contains the following contents:
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
#source-directory /etc/network/interfaces.d
#
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
# Added by rPi Access Point Setup
allow-hotplug wlan0
iface wlan0 inet static
address 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
Can you spot what's wrong?
I got it working, here's what I had to do:
- First my /etc/network/interfaces file contents looks like this:
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
#source-directory /etc/network/interfaces.d
#
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
# Added by rPi Access Point Setup
allow-hotplug wlan0
iface wlan0 inet static
address 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
- Next, I followed advice in the answer from Luis Godinez on Oct 6 '16 at 23:32 [here]
(https://raspberrypi.stackexchange.com/questions/24500/eth0-interface-not-starting-on-boot).- In a nutshell I enabled (
sudo apt-get update && sudo apt-get upgrade
maybe needed) "Predictable Network Interface Names" throughsudo raspi-config
> Advanced Options > Network interface names > Yes. - Then
vi /lib/udev/rules.d/73-usb-net-by-mac.rules
(not rules.d not rules, contrary to the referenced post), and changedNAME="$env{ID_NET_NAME_MAC}"
toNAME="eth0"
. - Reboot and it's working, including the passthrough functionality!
- In a nutshell I enabled (
Thanks a lot, I've tried several ways, but finally I just use your code, and it works!
@vicatcu yeah raspbian stretch has some awful decisions including the renaming of adapters. Try working with https://gist.github.com/Lewiscowles1986/390d4d423a08c4663c0ada0adfe04cdb as well to allow you to set /etc/network/interfaces
as you've indicated you have here.
Big Picture
- the script accepts an interface, it's documented above, use it for whatever your eth0 is called.
- this is only designed for raspbian without edits (although it should work on most vanilla debian-based distro's)
- the script linked helps get interfaces started if you've edited
/etc/network/interfaces
in a debian-based distro using the raspbian setup (to skip any networking if a single interface is defined in/etc/network/interfaces
...)
I'm not too sure but I think this is necessary to keep changes upon reboot.