Как из RPI3 сделать роутер

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Как установить дистрибутив RosaLinux на RaspberryPI3? #rpi3

Достаточно скачать образ распаковать и записать на флешку

wget https://file-store.rosalinux.ru/api/v1/file_stores/c08df8a4bfec623606a972caf0707c4e9c874672
tar -xvf RosaLinux-pi3b+-2023.1-jenkins.img.xz

Далее нужно подключить microSD карту и определить подключенный диск, это удобно сделать через вывод dmesg

Пример вывода:

[Вс апр 11 23:16:30 2021] sd 7:0:0:0: Attached scsi generic sg6 type 0
[Вс апр 11 23:16:30 2021] sd 7:0:0:0: [sdg] Attached SCSI removable disk
[Вс апр 11 23:16:49 2021] sd 7:0:0:0: [sdg] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
[Вс апр 11 23:16:49 2021] sdg: detected capacity change from 0 to 31116288
[Вс апр 11 23:16:49 2021] sdg: sdg1 sdg2
[Вс апр 11 23:18:15 2021] '''sdg: sdg1 sdg2'''
[Вс апр 11 23:18:29 2021] sdg: detected capacity change from 31116288 to 0

/dev/sdg и есть искомый диск.

Далее нужно записать скачанный образ на microsd

sudo dd if=RosaLinux-pi3b+-2023.1-jenkins.img of=/dev/sdg bs=1M


После этого можно будет запуститься.

Юзер rosa
Пароль rosa


Приступим к настройке роутера. Конфигурация его такова, что wlan0 порт это внешний интерфейс с интернетом, а eth0 будет раздавать адреса и сеть в локалку.

конфиг wifi настраивается через nmtui и сложностей не вызывает.

Пример настройки eth0

Screenshot 2021-04-12-110330.png

Нужно обратить внимание только на IPv4 CONFIGURATION <Manual> Должно быть именно так, а не dhcp.


Далее выполняем установку dnsmasq

dnf install -y dnsmasq

создаем файл конфига /etc/dnsmasq.d/server.conf с содержимым

# Only listen to routers' LAN NIC.  Doing so opens up tcp/udp port 53 to localhost and udp port 67 to world:
interface=eth0

# dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with dynamic interfaces (assigning dynamic IPs).
# dnsmasq will discard world requests to them, but the paranoid might like to close them and let the kernel handle them.
bind-interfaces

# Optionally set a domain name
domain=fdrt.local

# Set default gateway
dhcp-option=3,0.0.0.0

# Set DNS servers to announce
dhcp-option=6,0.0.0.0

# If your dnsmasq server is also doing the routing for your network, you can use option 121 to push a static route out.
# x.x.x.x is the destination LAN, yy is the CIDR notation (usually /24), and z.z.z.z is the host which will do the routing.
#dhcp-option=121,x.x.x.x/yy,z.z.z.z

# Dynamic range of IPs to make available to LAN PC and the lease time.
# Ideally set the lease time to 5m only at first to test everything works okay before you set long-lasting records.
dhcp-range=192.168.111.50,192.168.111.100,12h

# Provide IPv6 DHCP leases, the range is constructed using the network interface as prefix
#dhcp-range=::f,::ff,constructor:eth0

# If you’d like to have dnsmasq assign static IPs to some clients, bind the LAN computers NIC MAC addresses:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50
dhcp-host=aa:bb:cc:ff:dd:ee,192.168.111.51

Включаем форвардинг пакетов:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

Настраиваем iptables

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

Вместо выполнения команд можно отредактировать конфиг /etc/sysconfig/iptables

# Generated by iptables-save v1.8.7 on Wed Dec 16 17:42:28 2020
*filter
:INPUT ACCEPT [443:31304]
:FORWARD ACCEPT [1:88]
:OUTPUT ACCEPT [304:64489]
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
COMMIT
# Completed on Wed Dec 16 17:42:28 2020
# Generated by iptables-save v1.8.7 on Wed Dec 16 17:42:28 2020
*nat
:PREROUTING ACCEPT [64:4342]
:INPUT ACCEPT [22:1726]
:OUTPUT ACCEPT [18:1495]
:POSTROUTING ACCEPT [1:128]
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
# Completed on Wed Dec 16 17:42:28 2020

Далее запустим все нужные сервисы

systemctl enable sshd
systemctl enable dnsmasq
systemctl enable iptables
systemctl start sshd
systemctl start dnsmasq
systemctl start iptables

После всех этих действий rpi3 будет работать как роутер, на eth0 раздавать dhcp и ходить в интернет через wlan0.