edite o /etc/sysctl.conf para incluir esta linha e, em seguida, reinicialize:
net.ipv4.ip_forward=1
Estou configurando um roteador doméstico do Gentoo Linux com a seguinte configuração:
eth0
: conectado à WAN (gerenciado pelo systemd-networkd) wlan0
: ponto de acesso para LAN (gerenciado por hostapd) Eu uso dnsmasq
como servidor DNS e DHCP para as máquinas LAN.
Problema atual: posso conectar-me ao roteador, mas não tenho conexão com a Internet dos clientes.
Poucas informações:
iptables -t {filter,nat,mangle,raw} -L
mostra que todas as cadeias em todas as tabelas têm políticas ACCEPT
iptables -t nat -L
mostra o resultado esperado de iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sys.net.ipv4.ip_forward = 1
Eu testei os itens acima em diferentes máquinas clientes, e essas máquinas clientes foram testadas para funcionar bem com outros hotspots de Wi-Fi.
Eu não tenho idéia sobre como solucionar esse problema, parece que seguir o procedimento normal, mas o acesso à Internet do cliente é simplesmente não está funcionando. Qualquer sugestão sobre o que verificar em seguida ou a ideia de como corrigir este problema será muito apreciada!
EDITAR:
O problema aqui é semelhante a este: O tráfego não está sendo encaminhado através do NAT .
No entanto, eu confirmei de fato sys.net.ipv4.ip_forward = 1
.
Pegue o roteador como A
e um cliente como B
.
ifconfig
on B
:
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx
inet6 fe80::xxxx:xxxx:xxxx:xxxx%en0 prefixlen 64 scopeid 0x4
inet 192.168.1.62 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
ifconfig
on A
:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet xx.xx.xx.154 netmask 255.255.254.0 broadcast xx.xx.xx.255
inet6 fe80::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 251116 bytes 22652889 (21.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11731 bytes 979877 (956.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xdf100000-df120000
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.199 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 12867 bytes 1090816 (1.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1272 bytes 306689 (299.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
iptables -S
on A
:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
iptables -S -t nat
on A
:
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE
ping -n google.com
on A
:
PING google.com (216.58.192.206) 56(84) bytes of data.
64 bytes from 216.58.192.206: icmp_seq=1 ttl=57 time=1.29 ms
64 bytes from 216.58.192.206: icmp_seq=2 ttl=57 time=1.52 ms
[continued]
ping -n google.com
on B
:
PING google.com (216.58.192.206): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
[continued]
traceroute -i en0 8.8.8.8
on B
:
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
1 192.168.1.199 (192.168.1.199) 2.054 ms 2.033 ms 2.018 ms
2 * * *
3 * * *
4 * * *
edite o /etc/sysctl.conf para incluir esta linha e, em seguida, reinicialize:
net.ipv4.ip_forward=1
Descobri que defini o sinalizador de kernel ip_forward
antes de configurar a regra iptables
. Descobri que, se eu desabilitar e habilitá-lo novamente depois de tudo, o NAT funcionará bem. Então agora eu coloquei o comando echo 1 > /proc/sys/net/ipv4/ip_forward
after iptables
no meu script e está funcionando!
Ainda não sei sobre o mecanismo do motivo pelo qual a ordem é tão importante. Qualquer explicação ainda será bem-vinda.
Tags networking dnsmasq iptables router linux