Impossibile configurare il mascheramento NAT basato su nftables su mt300a


0

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, nftablesnon 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é nftnon si esegue il mascheramento NAT su pacchetti dal lato LAN e invece li lascia come pacchetti provenienti dal 172.16.0.0/20segmento 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' wwaninterfaccia supportata dall'interfaccia wwan0Linux.

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 nftper 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 nftablesregistrazione.

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-landall'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

Poiché aggiungi le logregole autonome nella parte inferiore di ogni catena, tieni presente che corrisponderanno solo ai pacchetti che non sono utilizzati dalle precedenti accepto dalle masqueraderegole. Dovresti metterli in cima o anche come parte della regola del travestimento.
gravità

Grazie! Pertanto, il fatto che la regola di registrazione venga aggiunta nella parte inferiore della catena conferma ulteriormente che la regola di mascheramento dell'interfaccia di output non è stata applicata. Proverò invece ad aggiungere l'istruzione di registrazione direttamente nella regola.
Jesús Zazueta,

Bene no, significa anche che semplicemente non vedi i log per i pacchetti che sono stati mascherati. Prova oifname "wwan0" log masqueradeo oifname "wwan0" counter masquerade.
gravità

Capito grazie! Ok, ho appena confermato, l'aggiunta logdell'istruzione direttamente alla regola la sopprime syslog, probabilmente significa che effettivamente la regola di mascheramento non si innesca. Continuerò a indagare. Grazie!
Jesús Zazueta,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.