J'essaie de configurer un routeur mt300a en tant que point d'accès LTE pour un ordinateur portable et une tablette (les deux se connectant à l'interface de pont wifi / lan de l'appareil, br-lan
).
Pour une raison quelconque, nftables
n'honore pas la directive consistant à effectuer un masquage NAT sur les paquets sortants de l'interface wwan0
(l' interface de la clé LTE). J'ai épuisé toutes mes options de dépannage.
Pourquoi nft
ne pas effectuer de masquage NAT sur des paquets du côté du réseau local, mais les laisser plutôt comme des paquets provenant du 172.16.0.0/20
segment de réseau?
Repro pour le bug de routage de modem LTE sur MT300A.
Définissez votre adresse IP manuellement sur 192.168.1.2 et Flash LEDE version 17.01.4
Définissez le nom d'utilisateur et le mot de passe du routeur (ne connectez pas encore le dongle LTE).
Configurez avec les commandes suivantes:
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
Redémarrez et connectez le port Ethernet WAN à une passerelle en amont (les configurations de réseau ne devraient pas entrer en conflit maintenant). Installez les packages de support 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
Empêchez le modem de tenter de se connecter automatiquement, puis vérifiez qu'il peut se connecter à l'apn cible (remplacez-le par le paramètre d'apn de votre carte SIM) et conservez ce paramètre entre les redémarrages.
uqmi -d /dev/cdc-wdm0 --stop-network 4294967295 --autoconnect
uqmi -d /dev/cdc-wdm0 --start-network simple --autoconnect
Ajoutez l' wwan
interface soutenue par l' wwan0
interface Linux.
uci set network.wwan=interface
uci set network.wwan.ifname='wwan0'
uci set network.wwan.proto='dhcp'
Désactiver le pare-feu d'Openwrt
/etc/init.d/firewall stop
/etc/init.d/firewall disable
Installez les packages de support pour le routage basé sur nftables.
opkg update
opkg install nftables tcpdump
rmmod iptable_nat
Restaurer les nftables à leur état d'origine
nft flush ruleset
Configurez nft
pour effectuer le routage 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
}
}
Configurez la nftables
journalisation.
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
À ce stade, le routeur lui-même maintient la connectivité à Internet via le modem LTE, mais les paquets entrants en provenance de l' br-lan
interface ne sont pas masqués correctement et le côté réseau local du routeur ne peut pas accéder à Internet car tous les paquets du côté réseau sont toujours conservés. l'adresse IP source du réseau local, et ne peuvent donc pas être routés de manière externe.
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
Sortie 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
log
règles au bas de chaque chaîne, garder à l' esprit ils ne correspondent paquets qui ne sont pas consommés par les précédentsaccept
ou lesmasquerade
règles. Vous devriez les placer au sommet ou même dans le cadre de la règle de la mascarade.oifname "wwan0" log masquerade
ouoifname "wwan0" counter masquerade
.log
direct de la déclaration à la règle la supprimesyslog
, ce qui signifie probablement qu’en fait, la règle de masquage n’est pas déclencheuse. Je vais continuer à enquêter. Merci!