Ip route nat linux

Маршрутизация и NAT для отдельных адресов

В общем, ситуация такая. Есть провайдер со своей локальной сеткой. Доступ в интернет в основном происходит через NAT, но есть возможность арендовать статический внешний адрес, что я и сделал. Дома стоит системник, выполняющий функцию NAT для домашней сети. Решил я в локальную сеть выходить без NAT, и попросил провайдера выделить подсеть локальных адресов и смаршрутизировать её на внешний интерфейс системника. Дома адреса назначил из выделенного диапазона, NAT прописал в iptables чтобы работало только для внешних адресов. А вот внутри локалки трафик не маршрутизируется. Точно проблема у меня, так как пробовал трассировку по одному из выделенных адресов от друга, подключённого к этому же провайдеру — они приходят на внешний интерфейс — а дальше не проходят. Что я сделал не так? Вот правила таблицы NAT iptables:

# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N locals
-A POSTROUTING -o eth0 -j locals
-A locals -d 10.0.0.0/8 -o eth0 -j RETURN
-A locals -d 172.16.0.0/12 -o eth0 -j RETURN
-A locals -d 192.168.0.0/16 -o eth0 -j RETURN
-A locals -o eth0 -j SNAT —to-source

# netstat -rn
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 255.255.255.252 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.115.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

Выданная мне подсеть локальных адресов — 192.168.115.0/24

Источник

Ip route nat linux

Не очень понимаю зачем нужно маркировать пакеты, если прямо в POSTROUTING можно задавать условие -d

  • 2.2 , ieroglif ( ? ), 12:17, 12/03/2008 [^] [^^] [^^^] [ответить]
  • + / –
    еще раз —
    1. изучение iptables — полностью на вашей совести. пусть люди сами изучают
    2. если понять фишку с маркировкой пакетов, то потом можно ее использовать при создании других правил как маршрутизации, так и фильтрации. считаю, что этот момент полезен и не столь очевиден при самостоятельном изучении как SNAT и MASQUERADE
  • 2.5 , AnatolZ ( ok ), 23:21, 14/07/2008 [^] [^^] [^^^] [ответить]
  • + / –
    >В очередной раз повторюсь, что использование SNAT в данном случае лучше чем
    >MASQUERADE.
    >Использование MASQUERADE вообще оправданно только в случае динамического IP на внешнем интерфейсе.
    >
    >
    >Не очень понимаю зачем нужно маркировать пакеты, если прямо в POSTROUTING можно
    >задавать условие -d

    Уважаемый demon не могли бы вы привести кусок примера ?? просто получилось у меня только с использованием меток.. но он мешают при написании скрипта с шейпеньем.
    кстати неукого не завалялся скриптик 🙂 Т.З. дано два канала 1)eth1-унлим 2)eth2-обычный ну и мега сеть 10.x.x.x с внутренней маршрутизацией OSPF(L3 коммутаторы) где дефолтный гетвей наш линукс сервер. билинг создает правило 10.1.1.1 на первый интерфейси ограничиваем его 128к, а на второй интерфейс 10.1.1.2 и на скорость наплевать.
    сделал пока только первое. а вот с двумя интерфейсами уже нет так как метка уже стоит.

    1.3 , rusya ( ok ), 16:40, 22/04/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    а какой айпишник указать в качестве гейта во второй локальной подсети?
    Или поднимать виртуальный интерфейс? Или что?
    1.4 , Аноним ( 4 ), 09:23, 30/04/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    «-A POTROUTING» ?
    1.6 , skyer ( ok ), 09:56, 31/07/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Странный пример в статье. На мой взгляд SNAT превосходит по производительности MASQUERADE, метки тоже не очень оправданы в принципи. Любую маршрутизацию которую надо сделать можно загнать в соответсвующие таблицы и не напрягать ядро левой работой с разбором меток. год назад делал объединение 5 каналов из одной подсети. К стати если случайно забанится один ипшник, то часть конектов будет попадать в мертвое соединение.
    1.7 , oleg ( ?? ), 12:45, 22/08/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    $IPT -t nat -A POTROUTING -s $NET_SUB1 -o NET_INET1 -j SNAT 1.1.1.0/24
    $IPT -t nat -A POTROUTING -s $NET_SUB2 -o NET_INET2 -j SNAT 2.2.2.0/24

    И ненадо меток и уж тем более утилиты ip, достаточно трансляции адресов

    2.8 , oleg ( ?? ), 12:47, 22/08/2008 [^] [^^] [^^^] [ответить] + / –
    POSTROUTING естественно)). копипаста чтоб ее
    1.9 , DeMarco ( ? ), 11:47, 14/05/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    хм! а если надо одну и туже сеть например 192.168.0.0/24 пускать в инет по разному например 80 8080 и т.д. порты через одного прова а фтп почту и т.д. через другого как быть? и как интересно резолвится днс в данном случае если дефолтный маршрут только один у него и днс свой соответственно а второго прова свой днс который уже не резолвится если есть основной маршрут
    1.10 , agg ( ? ), 15:06, 28/05/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    сразу после строки ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1
    пишет:
    RTNETLINK answers: Invalid argument
    и
    Error: an inet adress is expected rather than «table»

    у меня такая же проблема

    1.12 , spoilt21 ( ok ), 00:37, 13/06/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    забыл уточнить, у меня 2 ипа от 1 провайдера и все одинаково кроме ip
    1.13, spoilt21 ( ok ), 19:44, 14/06/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Разобрался с проблемами, у вас есть ошибки:

    #все пакеты, которые попали в цепочку POSTROUTING таблицы nat обрабатываем по двум правилам:
    $IPT -t nat -A POTROUTING -m mark —mark 10 -j MASQUERADE # натим все пакеты которые имеют метку 10
    $IPT -t nat -A POTROUTING -m mark —mark 11 -j MASQUERADE # натим все пакеты которые имеют метку 11

    POTROUTING заменить на POsTROUTING

    далее в файле роутинг
    GW1=»1.1.1.1″ # гейт первого провайдера.
    GW2=»2.2.2.1″ # гейт второго провайдера.

    заменить GW на GW_INET

    кажется по мелочевке всё, это глупые ошибки, остальные ошибки можно увидеть тут сравнив ваш оригинал с моей рабочей версией:
    http://www.opennet.ru/openforum/vsluhforumID6/19056.html#0

    2.14, дурак ( ? ), 13:54, 11/03/2012 [^] [^^] [^^^] [ответить] + / –
    объясните дураку как сделать доступным сервер в локалке по 2 провайдерам? я уже с ума сошел
    данным способом описанном здесь, да и вариантом попроще, доступен только сервер для 2 провайдеров, но не сервер в локальной сети

    ip route add $INET_GATE dev $INET_IF src $INET_IP table T1
    ip route add default via $INET_GATE table T1
    ip route add $INET_GATE dev $INET_IF src $INET_IP

    ip route add 127.0.0.0/8 dev lo table T1

    ip route add $INET_GATEE dev $INET_IFF src $INET_IPP table T2
    ip route add default via $INET_GATEE table T2
    ip route add $INET_GATEE dev $INET_IFF src $INET_IPP

    ip route add 127.0.0.0/8 dev lo table T2

    ip route add $INET_GATE dev $INET_IF src $INET_IP
    ip route add $INET_GATEE dev $INET_IFF src $INET_IPP

    ip route add default via $INET_GATE

    ip rule add fwmark 101 table T1
    ip rule add fwmark 102 table T2

    iptables -t nat -A PREROUTING -d $INET_IP -p tcp -m multiport —dports 80 -j MARK —set-mark 101
    iptables -t nat -A PREROUTING -d $INET_IPP -p tcp -m multiport —dports 80 -j MARK —set-mark 102

    ниже 2 правила судя по логам отрабатывают
    iptables -A PREROUTING -t nat -d $INET_IP -p tcp -m multiport —dports 80 -j DNAT —to-destination 192.168.0.2
    iptables -A PREROUTING -t nat -d $INET_IPP -p tcp -m multiport —dports 80 -j DNAT —to-destination 192.168.0.10

    робит:
    iptables -t filter -A FORWARD -i $INET_IF -o $LAN_IF -d 192.168.0.2 -j ACCEPT
    а это уже нет:
    iptables -t filter -A FORWARD -i $INET_IFF -o $LAN_IF -d 192.168.0.10 -j ACCEPT

    3.15, skyer ( ?? ), 14:47, 11/03/2012 [^] [^^] [^^^] [ответить] + / –
    > объясните дураку как сделать доступным сервер в локалке по 2 провайдерам?

    Третий набор для сети сделай. Тут описано два, тебе надо 3. Сделай по аналогии для внутренней сети.

    А вообще всё это делается через таблицы маршрутизации ядра гораздо красивее, проще и проц не жрёт при большой нагрузке.

    1.16, zatorax ( ? ), 12:26, 31/05/2012 [ответить] [﹢﹢﹢] [ · · · ] + / –
    хм.. навороченное решение, наверное есть какие то плюсы, я решил ту же проблему несколько иначе, возможно кому то пригодится.
    сначала все как в примере, добавляем таблицы в /etc/iproute2/rt_tables
    100 vlan2 (или ваши имена)
    200 vlan2
    300 vlan2
    #vlan2 — подсеть 1
    #vlan3 — подсеть 2
    #vlan4 — подсеть 3
    ip rule add from 192.168.0.0/26 table vlan2 #добавляем подсети в таблицы
    ip rule add from 192.168.0.64/26 table vlan3
    ip rule add from 192.168.0.128/26 table vlan4
    ip route add from 192.168.0.0/26 default via 192.168.2.186 dev br0 table vlan2 #добавляем роутер по умолчанию для этих подсеток
    ip route add from 192.168.0.64/26 default via 192.168.2.6 dev br0 table vlan3
    ip route add from 192.168.0.128/26 default via 192.168.2.6 dev br0 table vlan4

    ip route flush cache

    iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE #включаем маршрутизацию

    в общем то все, interface настраивается по вкусу, в примере адреса выглядят так:
    # loopback
    auto lo
    iface lo inet loopback

    auto eth0
    allow-hotplug eth0
    iface eth0 inet manual

    # bridge-local
    auto br0
    iface br0 inet static
    address 192.168.2.70
    network 192.168.2.0
    netmask 255.255.255.0
    broadcast 192.168.2.255
    bridge_ports eth0

    auto vlan2
    iface vlan2 inet static
    vlan-raw-device br0
    address 192.168.0.1
    netmask 255.255.255.192
    broadcast 192.168.0.63

    auto vlan3
    iface vlan3 inet static
    vlan-raw-device br0
    address 192.168.0.65
    netmask 255.255.255.192
    broadcast 192.168.0.127

    auto vlan4
    iface vlan4 inet static
    vlan-raw-device br0
    address 192.168.0.129
    netmask 255.255.255.192
    broadcast 192.168.0.191

    Источник

    Ip route nat linux

    Не очень понимаю зачем нужно маркировать пакеты, если прямо в POSTROUTING можно задавать условие -d

  • 2.2 , ieroglif ( ? ), 12:17, 12/03/2008 [^] [^^] [^^^] [ответить]
  • + / –
    еще раз —
    1. изучение iptables — полностью на вашей совести. пусть люди сами изучают
    2. если понять фишку с маркировкой пакетов, то потом можно ее использовать при создании других правил как маршрутизации, так и фильтрации. считаю, что этот момент полезен и не столь очевиден при самостоятельном изучении как SNAT и MASQUERADE
  • 2.5 , AnatolZ ( ok ), 23:21, 14/07/2008 [^] [^^] [^^^] [ответить]
  • + / –
    >В очередной раз повторюсь, что использование SNAT в данном случае лучше чем
    >MASQUERADE.
    >Использование MASQUERADE вообще оправданно только в случае динамического IP на внешнем интерфейсе.
    >
    >
    >Не очень понимаю зачем нужно маркировать пакеты, если прямо в POSTROUTING можно
    >задавать условие -d

    Уважаемый demon не могли бы вы привести кусок примера ?? просто получилось у меня только с использованием меток.. но он мешают при написании скрипта с шейпеньем.
    кстати неукого не завалялся скриптик 🙂 Т.З. дано два канала 1)eth1-унлим 2)eth2-обычный ну и мега сеть 10.x.x.x с внутренней маршрутизацией OSPF(L3 коммутаторы) где дефолтный гетвей наш линукс сервер. билинг создает правило 10.1.1.1 на первый интерфейси ограничиваем его 128к, а на второй интерфейс 10.1.1.2 и на скорость наплевать.
    сделал пока только первое. а вот с двумя интерфейсами уже нет так как метка уже стоит.

    1.3 , rusya ( ok ), 16:40, 22/04/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    а какой айпишник указать в качестве гейта во второй локальной подсети?
    Или поднимать виртуальный интерфейс? Или что?
    1.4 , Аноним ( 4 ), 09:23, 30/04/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    «-A POTROUTING» ?
    1.6 , skyer ( ok ), 09:56, 31/07/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Странный пример в статье. На мой взгляд SNAT превосходит по производительности MASQUERADE, метки тоже не очень оправданы в принципи. Любую маршрутизацию которую надо сделать можно загнать в соответсвующие таблицы и не напрягать ядро левой работой с разбором меток. год назад делал объединение 5 каналов из одной подсети. К стати если случайно забанится один ипшник, то часть конектов будет попадать в мертвое соединение.
    1.7 , oleg ( ?? ), 12:45, 22/08/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    $IPT -t nat -A POTROUTING -s $NET_SUB1 -o NET_INET1 -j SNAT 1.1.1.0/24
    $IPT -t nat -A POTROUTING -s $NET_SUB2 -o NET_INET2 -j SNAT 2.2.2.0/24

    И ненадо меток и уж тем более утилиты ip, достаточно трансляции адресов

    2.8 , oleg ( ?? ), 12:47, 22/08/2008 [^] [^^] [^^^] [ответить] + / –
    POSTROUTING естественно)). копипаста чтоб ее
    1.9 , DeMarco ( ? ), 11:47, 14/05/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    хм! а если надо одну и туже сеть например 192.168.0.0/24 пускать в инет по разному например 80 8080 и т.д. порты через одного прова а фтп почту и т.д. через другого как быть? и как интересно резолвится днс в данном случае если дефолтный маршрут только один у него и днс свой соответственно а второго прова свой днс который уже не резолвится если есть основной маршрут
    1.10 , agg ( ? ), 15:06, 28/05/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    сразу после строки ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1
    пишет:
    RTNETLINK answers: Invalid argument
    и
    Error: an inet adress is expected rather than «table»

    у меня такая же проблема

    1.12 , spoilt21 ( ok ), 00:37, 13/06/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    забыл уточнить, у меня 2 ипа от 1 провайдера и все одинаково кроме ip
    1.13, spoilt21 ( ok ), 19:44, 14/06/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Разобрался с проблемами, у вас есть ошибки:

    #все пакеты, которые попали в цепочку POSTROUTING таблицы nat обрабатываем по двум правилам:
    $IPT -t nat -A POTROUTING -m mark —mark 10 -j MASQUERADE # натим все пакеты которые имеют метку 10
    $IPT -t nat -A POTROUTING -m mark —mark 11 -j MASQUERADE # натим все пакеты которые имеют метку 11

    POTROUTING заменить на POsTROUTING

    далее в файле роутинг
    GW1=»1.1.1.1″ # гейт первого провайдера.
    GW2=»2.2.2.1″ # гейт второго провайдера.

    заменить GW на GW_INET

    кажется по мелочевке всё, это глупые ошибки, остальные ошибки можно увидеть тут сравнив ваш оригинал с моей рабочей версией:
    http://www.opennet.ru/openforum/vsluhforumID6/19056.html#0

    2.14, дурак ( ? ), 13:54, 11/03/2012 [^] [^^] [^^^] [ответить] + / –
    объясните дураку как сделать доступным сервер в локалке по 2 провайдерам? я уже с ума сошел
    данным способом описанном здесь, да и вариантом попроще, доступен только сервер для 2 провайдеров, но не сервер в локальной сети

    ip route add $INET_GATE dev $INET_IF src $INET_IP table T1
    ip route add default via $INET_GATE table T1
    ip route add $INET_GATE dev $INET_IF src $INET_IP

    ip route add 127.0.0.0/8 dev lo table T1

    ip route add $INET_GATEE dev $INET_IFF src $INET_IPP table T2
    ip route add default via $INET_GATEE table T2
    ip route add $INET_GATEE dev $INET_IFF src $INET_IPP

    ip route add 127.0.0.0/8 dev lo table T2

    ip route add $INET_GATE dev $INET_IF src $INET_IP
    ip route add $INET_GATEE dev $INET_IFF src $INET_IPP

    ip route add default via $INET_GATE

    ip rule add fwmark 101 table T1
    ip rule add fwmark 102 table T2

    iptables -t nat -A PREROUTING -d $INET_IP -p tcp -m multiport —dports 80 -j MARK —set-mark 101
    iptables -t nat -A PREROUTING -d $INET_IPP -p tcp -m multiport —dports 80 -j MARK —set-mark 102

    ниже 2 правила судя по логам отрабатывают
    iptables -A PREROUTING -t nat -d $INET_IP -p tcp -m multiport —dports 80 -j DNAT —to-destination 192.168.0.2
    iptables -A PREROUTING -t nat -d $INET_IPP -p tcp -m multiport —dports 80 -j DNAT —to-destination 192.168.0.10

    робит:
    iptables -t filter -A FORWARD -i $INET_IF -o $LAN_IF -d 192.168.0.2 -j ACCEPT
    а это уже нет:
    iptables -t filter -A FORWARD -i $INET_IFF -o $LAN_IF -d 192.168.0.10 -j ACCEPT

    3.15, skyer ( ?? ), 14:47, 11/03/2012 [^] [^^] [^^^] [ответить] + / –
    > объясните дураку как сделать доступным сервер в локалке по 2 провайдерам?

    Третий набор для сети сделай. Тут описано два, тебе надо 3. Сделай по аналогии для внутренней сети.

    А вообще всё это делается через таблицы маршрутизации ядра гораздо красивее, проще и проц не жрёт при большой нагрузке.

    1.16, zatorax ( ? ), 12:26, 31/05/2012 [ответить] [﹢﹢﹢] [ · · · ] + / –
    хм.. навороченное решение, наверное есть какие то плюсы, я решил ту же проблему несколько иначе, возможно кому то пригодится.
    сначала все как в примере, добавляем таблицы в /etc/iproute2/rt_tables
    100 vlan2 (или ваши имена)
    200 vlan2
    300 vlan2
    #vlan2 — подсеть 1
    #vlan3 — подсеть 2
    #vlan4 — подсеть 3
    ip rule add from 192.168.0.0/26 table vlan2 #добавляем подсети в таблицы
    ip rule add from 192.168.0.64/26 table vlan3
    ip rule add from 192.168.0.128/26 table vlan4
    ip route add from 192.168.0.0/26 default via 192.168.2.186 dev br0 table vlan2 #добавляем роутер по умолчанию для этих подсеток
    ip route add from 192.168.0.64/26 default via 192.168.2.6 dev br0 table vlan3
    ip route add from 192.168.0.128/26 default via 192.168.2.6 dev br0 table vlan4

    ip route flush cache

    iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE #включаем маршрутизацию

    в общем то все, interface настраивается по вкусу, в примере адреса выглядят так:
    # loopback
    auto lo
    iface lo inet loopback

    auto eth0
    allow-hotplug eth0
    iface eth0 inet manual

    # bridge-local
    auto br0
    iface br0 inet static
    address 192.168.2.70
    network 192.168.2.0
    netmask 255.255.255.0
    broadcast 192.168.2.255
    bridge_ports eth0

    auto vlan2
    iface vlan2 inet static
    vlan-raw-device br0
    address 192.168.0.1
    netmask 255.255.255.192
    broadcast 192.168.0.63

    auto vlan3
    iface vlan3 inet static
    vlan-raw-device br0
    address 192.168.0.65
    netmask 255.255.255.192
    broadcast 192.168.0.127

    auto vlan4
    iface vlan4 inet static
    vlan-raw-device br0
    address 192.168.0.129
    netmask 255.255.255.192
    broadcast 192.168.0.191

    Источник

    Читайте также:  Плавающая мышь windows 10
    Оцените статью