Как чередовать IP-адреса с помощью iptables с двумя сетевыми адаптерами

У меня есть 2 сетевых интерфейса на сервере ec2 linux (eth0 eth1). После настройки второго NI (eth1) я ' m может пинговать оба общедоступных IP-адреса с eth0 и eth1, чтобы подключиться через SSH.

Моя идея состоит в том, чтобы чередовать IP-адреса обеих сетевых адаптеров во всех исходящих пакетах. Однажды я добился чего-то подобного, имея несколько IP-адресов под одним единственным сетевым адаптером, используя iptables с помощью этого скрипта:

ip_list="xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy"  
dest_port="443"
interface="eth0"

i=`echo $ip_list |wc -w`
for each in $lista; do
/sbin/iptables -t nat -A POSTROUTING -m state --state NEW  -p tcp  --dport $dest_port -o $interface -m statistic --mode nth --every $i --packet 0 -j SNAT --to-source $each
i=$((i-1))
done

Но с двумя сетевыми адаптерами я не знаю, как сделать то же самое ... Я пытался изменить интерфейс $ переключает их на ботов eth0 и eth1, но ничего. Независимо от того, что я пытаюсь, пакеты всегда отправляются под одним и тем же общедоступным IP-адресом от eth0.

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

# ifconfig
eth0      Link encap:Ethernet  HWaddr 06:90:23:13:e8:22  
          inet addr:172.31.21.40  Bcast:172.31.31.255  Mask:255.255.240.0
          inet6 addr: fe80::490:23ff:fe13:e822/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:2818 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2326 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:327725 (327.7 KB)  TX bytes:594758 (594.7 KB)

eth1      Link encap:Ethernet  HWaddr 06:00:2e:05:47:ca  
          inet addr:172.31.26.216  Bcast:172.31.31.255  Mask:255.255.240.0
          inet6 addr: fe80::400:2eff:fe05:47ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:1030 errors:0 dropped:0 overruns:0 frame:0
          TX packets:935 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:85024 (85.0 KB)  TX bytes:165754 (165.7 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:942 errors:0 dropped:0 overruns:0 frame:0
          TX packets:942 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:323801 (323.8 KB)  TX bytes:323801 (323.8 KB)

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.16.1     0.0.0.0         UG    0      0        0 eth0
172.31.16.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0
172.31.16.0     0.0.0.0         255.255.240.0   U     0      0        0 eth1


# ip route show table 2
default via 172.31.16.1 dev eth1

# cat /proc/sys/net/ipv4/ip_forward
1

Есть идеи, как мне с этим справиться?!

PD: Я новичок в сетях, поэтому, пожалуйста, не беспокойтесь ...

-2
задан 26 April 2018 в 14:32
1 ответ

DNAT происходит в цепочке POSTROUTING, то есть после того, как Linux принял решение о маршрутизации. Linux выбирает исходящий интерфейс для IP-пакета, выбирая запись для следующего перехода через поиск в таблице маршрутизации.

Это означает, что интерфейс, который будет использоваться для исходящего пакета, уже выбран, когда пакет входит в POSTROUTING цепь. Правило DNAT не может использоваться с IP-адресом, который не привязан к интерфейсу исходящего пакета. Вот почему ваши пакеты будут иметь исходный IP-адрес интерфейса.

Чтобы получить желаемое поведение, вам нужно как-то изменить решение о маршрутизации, чтобы Linux использовал другой интерфейс. Маршрутизация политики - это механизм, используемый для изменения поведения маршрутизации Linux по умолчанию.

Однако я не знаю, возможно ли реализовать с ним этот «другой интерфейс для каждого исходящего TCP-соединения». Это потребует отслеживания состояния TCP-соединения, чтобы гарантировать, что одно TCP-соединение всегда будет использовать один и тот же исходящий интерфейс. Даже если бы это было возможно, потребуется много усилий для реализации и хорошего понимания работы сетей TCP / IP.

0
ответ дан 5 December 2019 в 21:35

Теги

Похожие вопросы