Sto cercando di eseguire il provisioning di un router mt300a come hotspot LTE per un laptop e un tablet (entrambi collegati all'interfaccia bridge wifi / lan del dispositivo, br-lan
).
Per qualche ragione, nftables
non sta onorando la direttiva per eseguire il mascheramento NAT sui pacchetti in uscita sull'interfaccia wwan0
(l' interfaccia dello stick LTE). Ho esaurito tutte le mie opzioni di risoluzione dei problemi.
Perché nft
non si esegue il mascheramento NAT su pacchetti dal lato LAN e invece li lascia come pacchetti provenienti dal 172.16.0.0/20
segmento di rete?
Repro per bug di routing modem LTE su MT300A.
Imposta il tuo indirizzo IP manualmente su 192.168.1.2 e Flash LEDE versione 17.01.4
Impostare nome utente e password per il router (non collegare ancora il dongle LTE).
Configurare con i seguenti comandi:
uci set dhcp.@dnsmasq[0].domain='gopher.io'
uci set system.@system[0].hostname='gopher'
uci set network.lan.ipaddr='172.16.0.1'
uci set network.lan.netmask='255.255.240.0'
uci set wireless.radio0=wifi-device
uci set wireless.radio0.channel='8'
uci set wireless.radio0.disabled='0'
uci set wireless.default_radio0.ssid='gopherwifi'
uci set wireless.default_radio0.encryption='psk2'
uci set wireless.default_radio0.key='iamthegopher'
uci commit
reboot now
Riavviare e connettere la porta WAN Ethernet a un gateway upstream (le configurazioni di rete non dovrebbero essere in conflitto ora). Installa i pacchetti di supporto QMI.
opkg update
opkg install \
usb-modeswitch \
kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan \
kmod-usb-serial-option kmod-usb-serial kmod-usb-serial-wwan \
uqmi luci-proto-qmi \
libustream-openssl ca-certificates
Impedisci al modem di tentare di connettersi automaticamente, quindi controlla che il modem possa connettersi all'apn di destinazione (sostituisci con l'impostazione apn della tua scheda SIM) e mantieni tale impostazione tra i riavvii.
uqmi -d /dev/cdc-wdm0 --stop-network 4294967295 --autoconnect
uqmi -d /dev/cdc-wdm0 --start-network simple --autoconnect
Aggiungi l' wwan
interfaccia supportata dall'interfaccia wwan0
Linux.
uci set network.wwan=interface
uci set network.wwan.ifname='wwan0'
uci set network.wwan.proto='dhcp'
Disabilita il firewall di openwrt
/etc/init.d/firewall stop
/etc/init.d/firewall disable
Installa i pacchetti di supporto per il routing basato su nftables.
opkg update
opkg install nftables tcpdump
rmmod iptable_nat
Ripristina nftables allo stato originale
nft flush ruleset
Configurare nft
per eseguire il routing nat.
# firewall
table ip filter {
# allow all packets sent by the firewall machine itself
chain output {
type filter hook output priority 100; policy accept;
}
# allow LAN to firewall, disallow WAN to firewall
chain input {
type filter hook input priority 0; policy accept;
iifname "br-lan" accept
iifname "wwan0" drop
}
# allow packets from LAN to WAN, and WAN to LAN if LAN initiated the connection
chain forward {
type filter hook forward priority 0; policy accept;
iifname "br-lan" oifname "wwan0" accept
iifname "wwan0" oifname "br-lan" ct state established accept
iifname "wwan0" oifname "br-lan" ct state related accept
iifname "wwan0" oifname "br-lan" drop
}
}
# NAT
table ip nat {
chain prerouting {
type nat hook prerouting priority 0; policy accept;
}
chain input {
type nat hook input priority 0; policy accept;
counter comment "count accepted packets"
}
chain output {
type nat hook output priority 0; policy accept;
counter comment "count accepted packets"
}
# for all packets to WAN, after routing, replace source address with primary IP of WAN interface
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "wwan0" masquerade
}
}
Configura la nftables
registrazione.
nft add rule filter output log
nft add rule filter input log
nft add rule filter forward log
nft add rule nat prerouting log
nft add rule nat postrouting log
A questo punto, il router stesso mantiene la connettività a Internet tramite il modem LTE, ma tutti i pacchetti in entrata br-lan
dall'interfaccia non vengono mascherati correttamente e il lato lan del router non può accedere a Internet poiché tutti i pacchetti dal lato lan continuano a trattenere l'indirizzo IP di origine della lan e quindi non sono instradabili esternamente.
ping www.google.com
PING www.google.com (172.217.9.4): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Uscita Syslog
kern.warn kernel: [ 685.079875] IN= OUT=wwan0 SRC=172.16.0.237 DST=172.217.9.4 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=45659 PROTO=ICMP TYPE=8 CODE=0 ID=24842 SEQ=0
oifname "wwan0" log masquerade
o oifname "wwan0" counter masquerade
.
log
dell'istruzione direttamente alla regola la sopprime syslog
, probabilmente significa che effettivamente la regola di mascheramento non si innesca. Continuerò a indagare. Grazie!
log
regole autonome nella parte inferiore di ogni catena, tieni presente che corrisponderanno solo ai pacchetti che non sono utilizzati dalle precedentiaccept
o dallemasquerade
regole. Dovresti metterli in cima o anche come parte della regola del travestimento.