Нам нужно пометить НОВЫЕ соединения маркером, затем различить исходящие пакеты на основе маркера и использовать любую из двух таблиц маршрутизации для маршрутизации их на соответствующий шлюз. Возможно, вам придется загрузить модуль CONNTRACK,
modprobe ip_conntrack
Давайте назовем MAC70 MAC-адресом шлюза 192.168.0.70, а MAC80 - MAC-адресом 192.168.0.80. затем
iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2
Эти два правила помечают входящие новые соединения (для протокола TCP измените, если нужно) двумя простыми маркерами.Маркеры предназначены для целых соединений, т.е. все последующие пакеты типа ESTABLISHED, RELATED, принадлежащие этому начальному пакету, будут иметь одинаковую метку.
Различие может быть сделано только на основе MAC-адреса шлюза, поскольку исходный IP-адрес каждого пакета является адресом клиента, с которого начинается соединение, а не адресом шлюза. Следовательно, это относится только к соединениям Ethernet, потому что кадры Wi-Fi не несут MAC-адреса.
Сейчас
ip rule add fwmark 1 table router70
ip rule add fwmark 2 table router80
Эти две команды указывают, какую таблицу маршрутизации (из двух) использовать, в зависимости от маркировки соединения / пакета.
Теперь мы настроили две таблицы маршрутизации:
echo 200 router70 >> /etc/iproute2/rt_tables
echo 201 router80 >> /etc/iproute2/rt_tables
ip route add 192.168.0.0/24 dev eth0 table router70
ip route add 192.168.0.0/24 dev eth0 table router80
ip route add default via 192.168.0.70 table router70
ip route add default via 192.168.0.80 table router80
Это предполагает, что ваша сетевая карта называется eth0, в противном случае измените соответствующим образом. Маршрутизация для всех других портов и / или протоколов остается той, что у вас уже есть, какой бы она ни была.
Вы сделали.