Skip to content

Instantly share code, notes, and snippets.

@skittleson
Last active January 9, 2023 04:27
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save skittleson/8d4f28b1c0d7b3c9a3fa2152438c64e4 to your computer and use it in GitHub Desktop.
Save skittleson/8d4f28b1c0d7b3c9a3fa2152438c64e4 to your computer and use it in GitHub Desktop.
Pi Router Steps

Router Setup

Hardware Devices

Goals

The general goal is to use off-the-shelf components to create a home network access point.

Installs

sudo apt install hostapd dnsmasq git rfkill curl bmon tcptrack

sudo DEBIAN_FRONTEND=noninteractive apt install -y netfilter-persistent iptables-persistent

sudo systemctl unmask hostapd

sudo systemctl enable hostapd

systemctl enable hostapd.service

systemctl enable dnsmasq.service

/etc/netplan/01-network-plan.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth1:
      dhcp4: yes
      dhcp6: no
    wlan0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.5.1/24]

netplan generate && netplan apply

DHCP/DNS

sudo nano /etc/dhcpcd.conf

interface wlan0
    static ip_address=192.168.5.1/24
    nohook wpa_supplicant

Forwarding

sudo nano /etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

sudo netfilter-persistent save

DHCP/DNS on Acesspoint

nano /etc/dnsmasq.conf

interface=wlan0 # Listening interface
dhcp-range=192.168.5.101,192.168.5.200,255.255.255.0,24h
                # Pool of IP addresses served via DHCP
domain=wlan     # Local wireless DNS domain
address=/gw.wlan/192.168.5.1
                # Alias for this router

Access Point Configuration

sudo rfkill unblock wlan

nano /etc/hostapd/hostapd.conf

ctrl_interface_group=0
interface=wlan0
ssid=TestNetwork
channel=44
wpa=2
wpa_passphrase=Test2000
#bridge=br0
wmm_enabled=1
wme_enabled=1
beacon_int=100
hw_mode=a
#ieee80211d=1
ieee80211n=1
ieee80211ac=1
country_code=US
ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40+][RX-STBC123][GF][DSSS_CCK-40]
#ht_capab=[HT40+]
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wpa_group_rekey=86400
### hostapd event logger configuration
logger_syslog=127
logger_syslog_level=2
logger_stdout=127
logger_stdout_level=2

List of connected devices

arp -a

See wifi card caps iw list

Traffic

Check general traffic on interfaces: bmon

Check traffic per client tcptrack -i wlan0

References

@skittleson
Copy link
Author

skittleson commented May 8, 2022

iw wlan0 set txpower fixed 4500

@skittleson
Copy link
Author

iw list

@skittleson
Copy link
Author

skittleson commented Sep 28, 2022

https://github.com/lakinduakash/linux-wifi-hotspot/blob/master/src/scripts/README.md

// write to the daemon config file so it can work on boot. See https://github.com/lakinduakash/linux-wifi-hotspot/blob/master/src/scripts/README.md

sudo create_ap --daemon --no-dnsmasq --dhcp-dns 192.168.12.1 --mkconfig /etc/create_ap.conf --country US --ieee80211n --freq-band 5 --ht_capab '[SHORT-GI-40][HT40+][HT40-][DSSS_CCK-40]' wlan0 eth0 TestNetwork Test2000

iw wlan0 set power_save off

systemctl start create_ap

systemctl enable create_ap

iw wlan0 set txpower fixed 4500

sudo nano /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

Run pihole with dhcp server enabled pointing to --dhcp-dns 192.168.12.1 option

crontab -e
@reboot /home/support/onstart.sh

@skittleson
Copy link
Author

curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true sudo -E bash

@skittleson
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment