Não é possível configurar NAT baseado em nftables masquerading em mt300a

0

Estou tentando provisionar um roteador mt300a como um ponto de acesso LTE para um laptop e um tablet (ambos conectados à interface de ponte wifi / lan do dispositivo, br-lan ).

Por algum motivo, nftables não está honrando a diretiva para realizar o mascaramento de NAT em pacotes de saída na interface wwan0 (a interface do bastão LTE). Eu já gastei todas as minhas opções de solução de problemas.

Por que nft não está realizando o mascaramento de NAT em pacotes do lado da LAN e, em vez disso, os deixa como pacotes provenientes do segmento de rede 172.16.0.0/20 ?

Repro para bug de roteamento de modem LTE no MT300A.

Defina o seu endereço de IP manualmente para 192.168.1.2 e Flash versão do LEDE 17.01.4

Defina o nome de usuário e a senha para o roteador (não conecte o dongle LTE ainda).

Configure com os seguintes comandos:

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

Reinicialize e conecte a porta Ethernet WAN a um gateway upstream (as configurações de rede não devem entrar em conflito agora). Instalar pacotes de suporte a 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

Pare o modem de tentar se conectar automaticamente e, em seguida, verifique se o modem pode se conectar ao apn de destino (substitua pela configuração de apn do seu cartão SIM) e mantenha essa configuração entre as reinicializações.

uqmi -d /dev/cdc-wdm0 --stop-network 4294967295 --autoconnect
uqmi -d /dev/cdc-wdm0 --start-network simple --autoconnect

Adicione a interface wwan respaldada pela interface wwan0 Linux.

uci set network.wwan=interface
uci set network.wwan.ifname='wwan0'
uci set network.wwan.proto='dhcp'

Desativar o firewall do openwrt

/etc/init.d/firewall stop
/etc/init.d/firewall disable

Instalar pacotes de suporte para roteamento baseado em nftables.

opkg update
opkg install nftables tcpdump
rmmod iptable_nat

Restaurar os nftables para o estado original

nft flush ruleset

Configure nft para realizar o roteamento 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
  }
}

Configure o nftables logging.

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

Neste ponto, o próprio roteador mantém a conectividade com a Internet através do modem LTE, mas nenhum pacote de entrada da interface br-lan é apropriadamente mascarado, e o lado da lan do roteador não pode acessar a Internet, já que todos os pacotes do lado da lan ainda mantêm o endereço IP de origem da lan e, portanto, não são roteáveis externamente.

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

Saída do 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
    
por Jesús Zazueta 25.05.2018 / 07:48

0 respostas