Я устанавливаю домашний маршрутизатор Gentoo Linux со следующей конфигурацией:

  • eth0: подключен к WAN (управляется systemd-networkd)
  • wlan0: точка доступа для локальной сети (управляемая hostapd)

Я использую dnsmasq качестве DNS и DHCP-сервера для компьютеров локальной сети.

Текущая проблема: я могу подключиться к маршрутизатору, но без подключения к Интернету от клиентов.

Немного информации:

  • Клиентский сервер имен: IP-адрес маршрутизатора.
  • Пинг с роутера на google.com нормальный.
  • Пинг с клиентских машин на роутер нормальный.
  • Пинг с клиентских машин на google.com всегда истекает (но имя домена разрешено)
  • Маршрутизатор: iptables -t {filter,nat,mangle,raw} -L показывает, что все цепочки во всех таблицах имеют политики ACCEPT
  • Маршрутизатор: iptables -t nat -L показывает ожидаемый результат iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • Подтверждено sys.net.ipv4.ip_forward = 1

Я протестировал вышеописанное на разных клиентских компьютерах, и эти клиентские машины были протестированы на совместимость с другими точками доступа Wi-Fi.

Я понятия не имею, как решить эту проблему, похоже, что я следую обычной процедуре, но доступ в Интернет с клиента просто не работает. Будем весьма благодарны за любые подсказки о том, что проверить дальше, или за идею о том, как решить эту проблему!

РЕДАКТИРОВАТЬ:

Проблема здесь выглядит примерно так: трафик не пересылается через NAT. Тем не менее, я действительно подтвердил sys.net.ipv4.ip_forward = 1 .

Возьмите роутер как A и клиент как B

ifconfig на 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 на 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 на A:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

iptables -S -t nat на A:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

ping -n google.com на 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 на 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 на 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  * * *

2 ответа2

1

отредактируйте /etc/sysctl.conf, чтобы включить эту строку, затем перезагрузите компьютер:

net.ipv4.ip_forward=1
0

Я понял, что установил флаг ip_forward прежде чем настраивать правило iptables . Я обнаружил, что если я отключу и включу его снова после всего, NAT будет работать хорошо. Итак, теперь я поставил echo 1 > /proc/sys/net/ipv4/ip_forward после команды iptables в моем скрипте, и она работает!

Я до сих пор не знаю, почему механизм так важен. Любое объяснение все еще будет приветствоваться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .