У меня есть 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: Я новичок в сетях, поэтому, пожалуйста, не беспокойтесь ...
DNAT происходит в цепочке POSTROUTING, то есть после того, как Linux принял решение о маршрутизации. Linux выбирает исходящий интерфейс для IP-пакета, выбирая запись для следующего перехода через поиск в таблице маршрутизации.
Это означает, что интерфейс, который будет использоваться для исходящего пакета, уже выбран, когда пакет входит в POSTROUTING цепь. Правило DNAT не может использоваться с IP-адресом, который не привязан к интерфейсу исходящего пакета. Вот почему ваши пакеты будут иметь исходный IP-адрес интерфейса.
Чтобы получить желаемое поведение, вам нужно как-то изменить решение о маршрутизации, чтобы Linux использовал другой интерфейс. Маршрутизация политики - это механизм, используемый для изменения поведения маршрутизации Linux по умолчанию.
Однако я не знаю, возможно ли реализовать с ним этот «другой интерфейс для каждого исходящего TCP-соединения». Это потребует отслеживания состояния TCP-соединения, чтобы гарантировать, что одно TCP-соединение всегда будет использовать один и тот же исходящий интерфейс. Даже если бы это было возможно, потребуется много усилий для реализации и хорошего понимания работы сетей TCP / IP.