Два шлюзе вам совершенно не за чем. Маршрутизацию и балансировку нужно осуществлять внутри одной железки, в случае с iptables или routeOS (аналогичное есть в Cisco, juniper, но там я не знаю точной реализации - гуглите) вам необходимо следующее:
1. Есть одна железка - она шлюз поумолчанию для локальной сети.
2. На железке есть два провайдера
3. Для обоих провайдеров настраиваете NAT
4. Маркируете трафик входящий через каждого провайдера своей меткой
5. Создаёте для каждого провайдера отдельную таблицу маршрутизации со своим шлюзом провайдера для маршрута 0.0.0.0/0
6. Направляете исходящий промаркированный трафик (ответы на входящие запросы из п.4) на соответствующие таблицы маршрутизации.
7. Для исходящего трафика делаете правило балансировки между шлюзами (для режима A-A) или переключение маршрута по-умолчанию (для режима A-P) на основании, например, пинга до 8.8.8.8
8. Порты выставляете и там и там, они заработают через обоих провайдеров если юзать пп.4-6
Две железки можно использовать только если между ними есть VRRP и они делят общий IP адрес локальной сети и этот айпишник - шлюз для неё. В этом случаето можно передавать роль мастера (активной ноды) и маршрутизировать через них, но на практике сводить две железяки (если они не умеют автосинхрон) довольно проблематично.
Спросите, если что-то непонятно.