2

Если я настрою linux box в качестве маршрутизатора за DSL-шлюзом, нужно ли мне включать маскарадинг или SNAT?

Логично предположить, что все, что мне нужно сделать, это включить ip_forwarding (сделано), но трафик в Интернет умирает, если я не выполняю NAT.

Конфиг выглядит следующим образом (извинения за диаграмму)

Интернет --- [ppp0_DSL router_eth0] ---- 192.168.1.x ----- [eth0_ubunturouter_eth1] ------ 192.168.2.x

Если NAT работает на широкополосном маршрутизаторе, то мне также нужно, чтобы он работал на маршрутизаторе Ubuntu?

Ниже приведен конфиг маршрутизатора Ubuntu iptables ...

  # Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*nat
:PREROUTING ACCEPT [10859:2328892]
:INPUT ACCEPT [1002:126271]
:OUTPUT ACCEPT [1256:91484]
:POSTROUTING ACCEPT [638:43890]
COMMIT
# Completed on Thu Oct 29 12:48:19 2015
# Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*filter
:INPUT ACCEPT [5:803]
:FORWARD ACCEPT [127:18532]
:OUTPUT ACCEPT [5:431]
# INPUT to allow ssh and ping from internal network
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "ssh on eth1"
-A INPUT -p icmp -j ACCEPT -m comment --comment "allow ping from internal"
-P INPUT DROP
# god table to handle traffic forwarding and test icmp
-N god
-A god -d 8.8.4.4 -j REJECT
-A god -d 8.8.8.8 -j DROP
# forward configured to explicitly route between interfaces - this could be redundant
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -p tcp -j ACCEPT -m comment --comment "all tcp"
-A FORWARD -p udp -j ACCEPT -m comment --comment "all udp"
-A FORWARD -p icmp -j god -m comment --comment "all icmp"
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-P FORWARD DROP
# output to allow web traffic and icmp from router
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-P OUTPUT DROP
COMMIT
# Completed on Thu Oct 29 12:48:19 2015

Этот конфиг продолжает убивать интернет, но он всегда работает, если я включаю

-A POSTROUTING -o eth0 -j SNAT --to 192.168.1.1

Но почему??? Почему этот блок работает только с SNAT, который не нужен, потому что он уже установлен на маршрутизаторе DSL?

                • ОБНОВЛЕНО - - - - - - -

Как видно из комментариев, Radhil и MichaelB оба правы. Я не могу принять во внимание отсутствие маршрутизации на широкополосном маршрутизаторе для чего-либо, кроме одной подсети (192.168.1.0 в данном случае). К сожалению, этот конкретный широкополосный маршрутизатор не предоставляет средств для добавления дополнительных статических маршрутов, поэтому мое решение для включения маршрутизации на основе источника из внутренней подсети в этом случае заключается в использовании таблиц PREROUTING для цепочки трафика.

например

A PREROUTING -i eth1 -m mac --mac-source xx:xx:xx:xx:xx:xx -j DNAT --to 192.168.2.200

затем

-A FORWARD -s 192.168.2.200 -j DROP

Это, очевидно, паршивое решение (сделано таким образом, поскольку IPTABLES не позволяет DROP в таблицах PREOUTING / POSTROUTING, но я просто включил его в качестве примера возможности маршрутизации на основе источника в этих стесненных обстоятельствах.

2 ответа2

2

Маршрутизатор DSL работает под собственным NAT на 192.168.1.0, верно? Это сеть, которую он собирается раздавать.

Таким образом, ответ будет , что он ничего не знаю о каких - либо 192.168.2.0 сетях не знает, и поэтому не пытается NAT это. Он может перенаправить этот трафик в Интернет, но Интернет сразу же отбросит эти частные IP-адреса. Вероятно, он также не имеет информации о маршруте, чтобы вернуться через ваш ящик ко второму сегменту сети, поэтому у вас все равно не будет пути возврата, если вы не настроите его как статический маршрут где-то и не укажете его.

Поэтому вам нужно дать DSL-маршрутизатору то, что он ожидает. Либо найдите способ изменить настройки для него на NAT для обоих сегментов и статический маршрут к вашей Ubuntu для 192.168.2.0, либо настройте NAT на свой, как вы нашли.

1

Это связано с тем, что модем DSL не знает о сети 192.168.2. *, Когда маршрутизатор получает пакет от 192.168.2.x и предполагает, что он должен ответить через шлюз по умолчанию, поскольку у него нет определенного маршрута к нему. подсети.

Если ваш DSL-маршрутизатор может быть настроен со статическим маршрутом, то это исправит его, если нет, вам потребуется настроить NAT на маршрутизаторе, чтобы весь трафик, который видит маршрутизатор, исходил из локальной сети (как насколько видит роутер DSL)

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