работа сервера с 2 внешними IP

Есть локальная сеть с 2-мя подсетями: 192.168.1.0/24 и 192.168.2.0/24. Есть 2 внешних IP одного провайдера (второй IP добавился к уже работающей системе). На сервере соответственно 4 сетевых карты. Подсети ходят в инет через один внешний, но задача заставить в подсети 192.168.1.0/24 одному IP ходить через другой внешний IP. Вот таблица маршрутизации:
91.194.206.64/26 dev eth1 proto kernel scope link src 91.194.206.96
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.1
192.168.1.0/24 dev eth5 proto kernel scope link src 192.168.1.1
178.213.249.0/24 via 178.213.249.1 dev eth6
127.0.0.0/8 dev lo scope link
default via 91.194.206.65 dev eth1
В файрволе весь IP-трафик для компа из подсети 192.168.1.0/24 заворачивается через один внешний IP

Правильно я настроил таблицу маршрутизации или можно как-то сделать по другому? Работоспособность еще не проверял.

Все что Вам необходимо

Все что Вам необходимо сделать так это дописать еще одно правило SNAT в iptables
Как то примерно так:

iptables -t nat -I POSTROUTING 1 -s 192.168.1.? -o eth0 -j SNAT --to-source внешний_ip

Только поставьте правильное устройство вместо eth0 и измените цифру порядкого номера правила. Суть в том что оно должно идти перед основным правилом вашего SNAT.

Сделал, но адрес

Сделал, но адрес 192.168.1.211 (которому и нужно получать - отправлять весь свой трафик через второй внешний IP) все равно ходит через внешний IP, на котором шлюз по умолчанию в таблице маршрутизации

iptables -L iptables -t nat

iptables -L
iptables -t nat -L
в студию.

iptables -L Chain INPUT

iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
bad_tcp_packets tcp -- anywhere anywhere tcp
ACCEPT all -- 192.168.1.0/24 anywhere
ACCEPT all -- 192.168.2.0/24 anywhere
ACCEPT all -- localhost.localdomain anywhere
ACCEPT all -- 192.168.1.1 anywhere
ACCEPT all -- 192.168.2.1 anywhere
ACCEPT all -- 91.194.206.96 anywhere
ACCEPT all -- 178.213.249.3 anywhere
ACCEPT all -- anywhere 192.168.1.0/24
ACCEPT all -- anywhere 192.168.2.0/24
ACCEPT all -- anywhere 91.194.206.96 state RELATED,ESTABLISHED
ACCEPT all -- anywhere 178.213.249.3 state RELATED,ESTABLISHED
tcp_packets tcp -- anywhere anywhere tcp
udp_packets udp -- anywhere anywhere udp
icmp_packets icmp -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 3/min burst 3 LOG level debug prefix `IPT INPUT packet died: '

Chain FORWARD (policy DROP)
target prot opt source destination
bad_tcp_packets tcp -- anywhere anywhere
ACCEPT all -- anywhere 192.168.1.211
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
LOG all -- anywhere anywhere limit: avg 3/min burst 3 LOG level debug prefix `IPT FORWARD packet died: '

Chain OUTPUT (policy DROP)
target prot opt source destination
bad_tcp_packets tcp -- anywhere anywhere
ACCEPT all -- localhost.localdomain anywhere
ACCEPT all -- 192.168.2.1 anywhere
ACCEPT all -- 192.168.1.1 anywhere
ACCEPT all -- 178.213.249.3 anywhere
ACCEPT all -- 91.194.206.96 anywhere
LOG all -- anywhere anywhere limit: avg 3/sec burst 3 LOG level debug prefix `IPT OUTPUT packet died: '

Chain allowed (10 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN
ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED
DROP tcp -- anywhere anywhere

Chain bad_tcp_packets (3 references)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp flags:!SYN,RST,ACK/SYN state NEW

Chain icmp_packets (1 references)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere icmp destination-unreachable
ACCEPT icmp -- anywhere anywhere icmp redirect
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT icmp -- anywhere anywhere icmp time-exceeded

Chain tcp_packets (1 references)
target prot opt source destination
allowed tcp -- anywhere anywhere tcp dpt:http
allowed tcp -- anywhere anywhere tcp dpt:smtp
allowed tcp -- anywhere anywhere tcp dpt:jetdirect
allowed tcp -- anywhere anywhere tcp dpt:https
allowed tcp -- anywhere anywhere tcp dpt:domain
allowed tcp -- anywhere anywhere tcp spt:domain
allowed tcp -- anywhere anywhere tcp spt:ntp
allowed tcp -- anywhere anywhere tcp dpt:ntp
allowed tcp -- anywhere anywhere tcp dpt:87
allowed tcp -- anywhere anywhere tcp spt:87

Chain udp_packets (1 references)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT udp -- anywhere anywhere udp spt:domain
ACCEPT udp -- anywhere anywhere udp dpt:4000
ACCEPT udp -- anywhere anywhere udp dpt:ntp

iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere 178.213.249.3 tcp to:192.168.1.211
ACCEPT all -- 192.168.2.0/28 anywhere
REDIRECT tcp -- 192.168.2.0/24 !192.168.2.0/24 tcp multiport dports https,http,http-alt redir ports 3128

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.1.211 anywhere to:178.213.249.3
SNAT all -- anywhere anywhere to:91.194.206.96

вроде всё правильно. но

вроде всё правильно.
но смущает 2 вещи
1) в таблице маршрутизации должно быть что то вроде

178.213.249.0/24 dev eth0  proto kernel  scope link  src 178.213.249.3

Этот маршрут должен присутствовать по умолчанию.
покажите пожалуйста ip a

2) вы уверены что в правиле SNAT all -- 192.168.1.211 anywhere to:178.213.249.3 верно указали интерфейс?
посмотреть можно

iptables -t nat -v -L

Я честно говоря не догоняю

Я честно говоря не догоняю как сделать так: 178.213.249.0/24 dev eth6 proto kernel scope link src 178.213.249.3
У меня то уже есть маршрут по-умолчанию на первый внешний IP

ip a
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth5: mtu 1500 qdisc htb state UP qlen 1000
link/ether 00:a0:c9:72:0a:5d brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth5
inet6 fe80::2a0:c9ff:fe72:a5d/64 scope link
valid_lft forever preferred_lft forever
3: eth6: mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:d0:b7:b2:14:30 brd ff:ff:ff:ff:ff:ff
4: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:80:ad:87:00:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.1/24 brd 192.168.2.255 scope global eth0
inet6 fe80::280:adff:fe87:e0/64 scope link
valid_lft forever preferred_lft forever
5: eth1: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:80:ad:86:fe:33 brd ff:ff:ff:ff:ff:ff
inet 91.194.206.96/26 brd 91.194.206.127 scope global eth1
inet6 fe80::280:adff:fe86:fe33/64 scope link
valid_lft forever preferred_lft forever

iptables -t nat -v -L
Chain PREROUTING (policy ACCEPT 1229K packets, 70M bytes)
pkts bytes target prot opt in out source destination
241 11988 DNAT tcp -- any any anywhere 178.213.249.3 tcp to:192.168.1.211
85038 6477K ACCEPT all -- any any 192.168.2.0/28 anywhere

4381 221K REDIRECT tcp -- eth0 any 192.168.2.0/24 !192.168.2.0/24 tcp multiport dports https,http,http-alt redir ports 3128

Chain OUTPUT (policy ACCEPT 116K packets, 7840K bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 66435 packets, 4736K bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- any eth6 192.168.1.211 anywhere to:178.213.249.3
918K 52M SNAT all -- any eth1 anywhere anywhere to:91.194.206.96

а где собственно

а где собственно 178.213.249.3 на eth6 ????????

Хорошо, сделал ip route

Хорошо, сделал
ip route list
91.194.206.64/26 dev eth1 proto kernel scope link src 91.194.206.96
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.1
192.168.1.0/24 dev eth5 proto kernel scope link src 192.168.1.1
178.213.249.0/24 dev eth6 proto kernel scope link src 178.213.249.3
127.0.0.0/8 dev lo scope link
default via 91.194.206.65 dev eth1

Как добавить шлюз 178.213.249.1 для eth6 ? Ведь по-умолчанию шлюз 91.194.206.65

как то так echo "1

как то так

echo "1       NET2" >> /etc/iproute2/rt_tables
ip route add 178.213.249.0/24 dev eth6 src 178.213.249.3 table NET2
ip route add default 178.213.249.1 table NET2

Только проверьте что у вас нет уже такой таблицы в /etc/iproute2/rt_tables

Что-то не хочет добавлять

Что-то не хочет добавлять маршрут
echo "1 NET2" >> /etc/iproute2/rt_tables
baz2 iproute2 # ip route add 178.213.249.0/24 dev eth6 src 178.213.249.3 table NET2
baz2 iproute2 # ip route list
91.194.206.64/26 dev eth1 proto kernel scope link src 91.194.206.96
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.1
192.168.1.0/24 dev eth5 proto kernel scope link src 192.168.1.1
178.213.249.0/24 dev eth6 scope link src 178.213.249.3
127.0.0.0/8 dev lo scope link
default via 91.194.206.65 dev eth1
baz2 iproute2 # ip route add default via 178.213.249.1 table NET2
RTNETLINK answers: File exists

ошибся в синтаксисе.

ошибся в синтаксисе. извините.

ip route add default via 178.213.249.1 table NET2

очистите таблицу

ip route flush table NET2

и выполните снова

ip route add 178.213.249.0/24 dev eth6 src 178.213.249.3 table NET2
ip route add default via 178.213.249.1 table NET2

Должно получится

# ip route show table NET2
178.213.249.0/24 dev eth6  scope link  src 178.213.249.3 
default via 178.213.249.1 dev eth6

Не проще ли интерфейс занатить а не IP ?

iptables -t nat -A POSTROUTING -s "один IP" -o интерфейс(который хотим занатить) -j MASQUERADE

после того как настройки сделали, запустите трассировку в нет с компа для которого все это делается :) , чтобы посмотреть через какой инт идет траффик

Уважаемый, а за ради чего

Уважаемый, а за ради чего использовать MASQUERADE вместо SNAT? У него динамический IP и его требуется каждый раз проверять? проясните.

Ничего не понимаю, почему нет

Ничего не понимаю, почему нет ничего в таблице NET2? Я так понимаю он добавляет в главную таблицу, а NET2 остается пустая.
ip route flush table NET2
baz2 ~ # ip route add 178.213.249.0/24 dev eth6 src 178.213.249.3 table NET2
baz2 ~ # ip route add default via 178.213.249.1 table NET2
RTNETLINK answers: File exists
baz2 ~ # ip route list
91.194.206.64/26 dev eth1 proto kernel scope link src 91.194.206.96
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.1
192.168.1.0/24 dev eth5 proto kernel scope link src 192.168.1.1
178.213.249.0/24 dev eth6 scope link src 178.213.249.3
127.0.0.0/8 dev lo scope link
default via 91.194.206.65 dev eth1
baz2 ~ # ip route list table NET2
baz2 ~ #

он ругается что такой маршрут

он ругается что такой маршрут есть уже. Покажите все маршруты

ip route show table all

и приложите

cat /etc/iproute2/rt_tables

Может в ядре какие-то модули,

Может в ядре какие-то модули, нужные для iproute2 не добавлены?
ip route show table all
local 192.168.1.1 dev eth5 table local proto kernel scope host src 192.168.1.1
broadcast 192.168.1.0 dev eth5 table local proto kernel scope link src 192.168.1.1
broadcast 192.168.2.255 dev eth0 table local proto kernel scope link src 192.168.2.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
broadcast 178.213.249.255 dev eth6 table local proto kernel scope link src 178.213.249.3
broadcast 91.194.206.64 dev eth1 table local proto kernel scope link src 91.194.206.96
local 91.194.206.96 dev eth1 table local proto kernel scope host src 91.194.206.96
local 178.213.249.3 dev eth6 table local proto kernel scope host src 178.213.249.3
local 192.168.2.1 dev eth0 table local proto kernel scope host src 192.168.2.1
broadcast 192.168.1.255 dev eth5 table local proto kernel scope link src 192.168.1.1
broadcast 192.168.2.0 dev eth0 table local proto kernel scope link src 192.168.2.1
broadcast 91.194.206.127 dev eth1 table local proto kernel scope link src 91.194.206.96
broadcast 178.213.249.0 dev eth6 table local proto kernel scope link src 178.213.249.3
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
91.194.206.64/26 dev eth1 proto kernel scope link src 91.194.206.96
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.1
192.168.1.0/24 dev eth5 proto kernel scope link src 192.168.1.1
178.213.249.0/24 dev eth6 scope link src 178.213.249.3
127.0.0.0/8 dev lo scope link
default via 91.194.206.65 dev eth1
local ::1 via :: dev lo proto none metric 0 mtu 16436 rtt 85ms rttvar 110ms cwnd 4 advmss 16376 hoplimit 0
local fe80::280:adff:fe86:fe33 via :: dev lo proto none metric 0 mtu 16436 advmss 16376 hoplimit 0
local fe80::280:adff:fe87:e0 via :: dev lo proto none metric 0 mtu 16436 advmss 16376 hoplimit 0
local fe80::2a0:c9ff:fe72:a5d via :: dev lo proto none metric 0 mtu 16436 advmss 16376 hoplimit 0
local fe80::2d0:b7ff:feb2:1430 via :: dev lo proto none metric 0 mtu 16436 advmss 16376 hoplimit 0
fe80::/64 dev eth5 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0
fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0
fe80::/64 dev eth1 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0
fe80::/64 dev eth6 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0
ff00::/8 dev eth5 metric 256 mtu 1500 advmss 1440 hoplimit 0
ff00::/8 dev eth0 metric 256 mtu 1500 advmss 1440 hoplimit 0
ff00::/8 dev eth1 metric 256 mtu 1500 advmss 1440 hoplimit 0
ff00::/8 dev eth6 metric 256 mtu 1500 advmss 1440 hoplimit 0
unreachable default dev lo table unspec proto kernel metric -1 error -101 hoplimit 255

cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
1 NET2

ну даже не знаю... покажите

ну даже не знаю...
покажите /etc/conf.d/net

После включения опций в ядре

После включения опций в ядре насчет маршрутизации и перекомпиляции ядра получилось так:
ip route list
91.194.206.64/26 dev eth1 proto kernel scope link src 91.194.206.96
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.1
192.168.1.0/24 dev eth5 proto kernel scope link src 192.168.1.1
178.213.249.0/24 dev eth6 proto kernel scope link src 178.213.249.3
127.0.0.0/8 dev lo scope link
default via 91.194.206.65 dev eth1
baz2 ~ # ip route show table NET2
178.213.249.0/24 dev eth6 scope link src 178.213.249.3
default via 178.213.249.1 dev eth6

arp -i eth6
arp: in 33 entries no match found.
т.е. опять нужный не ходит через него

1 вопрос: строчка 178.213.249.0/24 dev eth6 proto kernel scope link src 178.213.249.3 в главной таблице должна присутствовать?
2 вопрос: что нужно прописать в /etc/conf.d/net чтобы при рестарте системы все маршруты сохранялись?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".