Назад | Перейти на главную страницу

iptables для совместного использования подключения к Интернету

Задача:

Я работаю над встроенным устройством Linux со следующей конфигурацией сети.

Моя цель состоит в том, чтобы пакеты NAT достигали 'wlan0' (и предназначались для IP-адресов, отличных от тех, что находятся в подсети wlan0) от беспроводных клиентов, подключенных к нему к 'eth1' (или) 'eth2'. Так что беспроводные клиенты, подключенные к wlan0, будут иметь доступ в Интернет.

Решение пробовали:

Я просмотрел несколько ссылок (к сожалению, я пропустил ссылки), в которых было предложено следующее решение с использованием iptables. Я написал это как сценарий (ics.sh).

EXTIF=$1
INTIF=$2    
        echo "1" > /proc/sys/net/ipv4/ip_forward
        echo "1" > /proc/sys/net/ipv4/ip_dynaddr

        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -F INPUT
        $IPTABLES -P OUTPUT ACCEPT
        $IPTABLES -F OUTPUT
        $IPTABLES -P FORWARD DROP
        $IPTABLES -F FORWARD
        $IPTABLES -t nat -F

        route add -net 192.168.10.0/24 dev $INTIF

        $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
        #$IPTABLES -A FORWARD -j LOG
    #Puzzled, how will the matching condition of `-o $EXTIF` be satisfied for any packets???

        echo "   Enabling SNAT (MASQUERADE) functionality on $EXTIF"
        $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

Я немного новичок в iptables так что есть следующие пояснения

Требуются пояснения:

В MASQUERADE iptables плюс /proc/sys/net/ipv4/ip_forward = 1 творит чудеса.

И условие соответствия для -o $EXTIF исходит из ваших маршрутов.

У тебя должен быть один route add default gw x.x.x.x $EXTIF X.x.x.x должен быть внутренним IP-адресом (LAN) вашего интернет-маршрутизатора.

С этим шлюзом по умолчанию ядро ​​знает, что полученный пакет не для вашей сети, поэтому он должен быть направлен за пределы этого шлюза. Iptables видит это и составляет SNAT Маскарада.

Думаю, ваш сценарий должен выглядеть так:

    EXTIF=$1
    INTIF=$2
    WLAN_NET="192.168.10.0/24"

    echo "1" > /proc/sys/net/ipv4/ip_forward

    # Flush all rules
    IPTABLES -F

    #Allow masquerade only if requested internet address
    IPTABLES -A POSTROUTING -s $WLAN_NET ! -d WLAN_NET -o $EXTIF -j MASQUERADE

    #Allow forward from localnet to internet
    IPTABLES -A FORWARD -s $WLAN_NET ! -d $WLAN_NET -i $INTIF -j ACCEPT