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