Здравствуйте.
Имеется:
- Raspberry Pi B+ 1.2
Linux rpi 6.6.51+rpt-rpi-v6 #1 Raspbian 1:6.6.51-1+rpt3 (2024-10-08) armv6l GNU/Linux
- USB-WiFi
Bus 001 Device 004: ID 148f:761a Ralink Technology, Corp. MT7610U ("Archer T2U" 2.4G+5G WLAN Adapter)
- nftables
# dpkg-query -l | grep nftables
nftables 1.0.6-2+deb12u2
# systemctl list-units --type=service --all | grep nftables
nftables.service loaded active exited nftables
# cat /usr/lib/systemd/system/nftables.service
[Unit]
Description=nftables
Documentation=man:nft(8) http://wiki.nftables.org
Wants=network-pre.target
Before=network-pre.target shutdown.target
Conflicts=shutdown.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
StandardInput=null
ProtectSystem=full
ProtectHome=true
ExecStart=/usr/sbin/nft -f /etc/nftables.conf
ExecReload=/usr/sbin/nft -f /etc/nftables.conf
ExecStop=/usr/sbin/nft flush ruleset
[Install]
WantedBy=sysinit.target
# cat /etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset
table ip shared-wlan0 {
chain nat_postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 172.16.13.0/24 ip daddr != 172.16.13.0/24 masquerade
}
chain filter_forward {
type filter hook forward priority filter; policy accept;
ip daddr 172.16.13.0/24 oifname "wlan0" ct state { established, related } accept
ip saddr 172.16.13.0/24 iifname "wlan0" accept
iifname "wlan0" oifname "wlan0" accept
iifname "wlan0" reject
oifname "wlan0" reject
}
}
Оба интерфейса (eth0 и wlan0) устройства под управлением NetworkManager. wlan0:
# cat /etc/NetworkManager/system-connections/WIFIUSBAP.nmconnection
[connection]
id=WIFIUSBAP
uuid=53641af8-1202-233d-6a69-26a7501f784f
type=wifi
interface-name=wlan0
timestamp=1739354341
[wifi]
band=a
channel=36
mode=ap
ssid=VerySlowAP
[wifi-security]
group=ccmp;
key-mgmt=wpa-psk
pairwise=ccmp;
pmf=1
psk=megasupersecretpassword
[ipv4]
address1=172.16.13.1/24
method=shared
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
При включении/перезагрузке устройства правила для nat, указанные выше для nftables в его конфигурации, отсутствуют
#nft -s list ruleset
<ПУСТО>
На сколько я догадываюсь, но могу и ошибаться, это происходит из-за того, что подключение eth0 происходит «мухой», а вот назначение адреса для интерфейса wlan0 на устройстве «Archer T2U» - это процедура неспешная.
Нет, всё работает, но по моим наблюдениям надо секунд 5-7 и адрес на интерфейс wlan0 так и назначается. Однако, сервис nftables срабатывает всегда раньше, чем wlan0 получает адрес.
Собственно, можно вручную перезапустить nftables после получения адреса wlan0 и всё будет хорошо.
И тут я впал в ступор. Не могу сообразить как бы так попроще заставить nftables срабатывать при старте операционной системы с неспешным «Archer T2U» именно после того, как именно этот «Archer T2U» получит адрес? Может быть, кто-нибудь не сочтёт за труд подсказать. Спасибо.