Если я настрою 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, но я просто включил его в качестве примера возможности маршрутизации на основе источника в этих стесненных обстоятельствах.