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

Маршрутизация NAT с несколькими интерфейсами

У меня есть несколько подключений к Интернету от разных интернет-провайдеров, и мне нужно направить определенный трафик по определенной ссылке интернет-провайдера. Я использую для этого Debian.

Настройка выглядит следующим образом;

eth0 (IP-адрес 192.168.1.2 со шлюзом 192.168.1.1 (192.168.1.1 - это маршрутизатор с несколькими ADSL WAN с четырьмя различными ADSL-соединениями с балансировкой нагрузки))

eth1 (IP-адрес 10.254.239.1. Это локальная сеть, и все рабочие станции получают от нее IP-адреса через DHCP)

eth2 (IP-адрес (поддельный) 20.20.20.22 со шлюзом 20.20.20.21)

Цель состоит в том, чтобы направлять только определенный трафик через eth2, а весь другой трафик через eth0, который идет на 4-портовый WAN-маршрутизатор.

Я прочитал примеры lartc.org и многие другие, но не могу заставить его работать ...

Я сделал следующее;

Добавлена ​​таблица маршрутов в / etc / iproute2 / rt_tables

201     fiber

В rc.local добавлено следующее

ip route add 20.20.20.20 dev eth2 src 20.20.20.22 table fiber 
ip route add default via 20.20.20.21 table fiber
ip route add 20.20.20.20 dev eth2 src 20.20.20.22
ip rule add fwmark 2 table fiber

Изменен скрипт iptables на:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth2 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT
iptables -t mangle -N fiber
iptables -t mangle -A fiber -j MARK --set-mark 2
iptables -t mangle -A fiber -j ACCEPT
#  ONLY ROUTE TRAFFIC GOING TO 1.2.3.x OVER THE FIBER LINK
iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.4 --dport 80 -j fiber
iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.5 --dport 80 -j fiber
iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.4 --dport 443 -j fiber
iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.5 --dport 443 -j fiber
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -A FORWARD -i eth2 -o eth2 -j REJECT

Включена переадресация IP на уровне ядра:

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

Что я упускаю или делаю не так? Любая помощь очень ценится.

Эти правила, вероятно, не делают того, что вы хотите. Первое правило разрешает любое новое соединение от eth1 и eth2, второе разрешает все от eth0 и eth1. Похоже, что это разрешает все с любого интерфейса, что делает ваш брандмауэр бессмысленным.

iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth2 -j ACCEPT

Вы можете иметь в виду это вместо этого.

iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

В любом случае, вместо того, чтобы добавлять что-то в rc.local, я бы, вероятно, обновил ваш / etc / network / interfaces, чтобы он выглядел так. Я делаю некоторые предположения о том, что у вас есть для масок, поэтому обязательно проверьте и обновите. Вероятно, вам следует добавить все маршруты ссылок в таблицу волокон.

auto eth0
iface eth0 inet static
  address 192.168.1.2
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1
  up ip route add table fiber scope link proto kernel dev eth0 192.168.1.0/24

auto eth1
iface eth1 inet static
  address 10.254.239.1
  netmask 255.255.255.0
  network 10.254.239.0
  broadcast 10.254.239.255
  up ip route add table fiber scope link proto kernel dev eth1 10.254.239.0/24

auto eth2
iface eth2 inet static
  address 20.20.20.22
  netmask 255.255.255.252
  network 20.20.20.20
  broadcast 20.20.20.23
  up ip route add table fiber scope link proto kernel dev eth2 20.20.20.20/30
  up ip route add default via 20.20.20.21 table fiber
  up ip rule add fwmark 2 table fiber