Кажется, я не могу понять этот псевдоним IP на Amazon EC2. Я знаю, что это должно быть прямо fwd.
Таким образом, у меня есть два вопроса (подробности моего сценария следуют после вопросов), по приоритету:
Конфигурационные файлы - это моя вторичная проблема, поскольку я даже не могу настроить маршрутизацию через CLI.
Вот что у меня по умолчанию:
eth0 Link encap:Ethernet HWaddr 0a:64:bd:67:d6:4a
inet addr:172.31.16.15 Bcast:172.31.31.255 Mask:255.255.240.0
inet6 addr: fe80::864:bdff:fe67:d64a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:266 errors:0 dropped:0 overruns:0 frame:0
TX packets:257 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:29714 (29.7 KB) TX bytes:29843 (29.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
Я хочу:
eth0 -> 172.31.16.15
eth0:0 -> 172.31.16.100
eth0:1 -> 172.31.16.101
Конечно, с правильной маршрутизацией (и я думаю, что здесь у меня все идет не так), чтобы я мог успешно выполнить это:
1. telnet -b 172.31.16.15 172.31.16.20 5222
2. telnet -b 172.31.16.100 172.31.16.20 5222
3. telnet -b 172.31.16.101 172.31.16.20 5222
Даже пинг работает только с ip 172.31.16.15:
1. ping -I 172.31.16.15 172.31.16.20
2. ping -I 172.31.16.100 172.31.16.20
3. ping -I 172.31.16.101 172.31.16.20
Только [1] работает как для команд telnet, так и для ping, указанных выше.
Когда я выполняю команду telnet и получаю tcpdump трафика, результаты будут следующими:
For 172.31.16.15 when it works:
12:58:14.082176 IP (tos 0x10, ttl 64, id 59547, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.15.26798 > 172.31.16.20.5222: Flags [S], cksum 0x7890 (incorrect -> 0x455e), seq 2790518412, win 29200, options [mss 1460,sackOK,TS val 2360855 ecr 0,nop,wscale 7], length 0
12:58:14.082848 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.20.5222 > 172.31.16.15.26798: Flags [S.], cksum 0xfb9b (correct), seq 1051320718, ack 2790518413, win 28960, options [mss 1460,sackOK,TS val 2304582 ecr 2360855,nop,wscale 7], length 0
12:58:14.082877 IP (tos 0x10, ttl 64, id 59548, offset 0, flags [DF], proto TCP (6), length 52)
172.31.16.15.26798 > 172.31.16.20.5222: Flags [.], cksum 0x7888 (incorrect -> 0x9aa3), ack 1, win 229, options [nop,nop,TS val 2360855 ecr 2304582], length 0
For 172.31.16.100 when it doesn't work (also, nothing arrives at receiving end):
12:59:01.001723 IP (tos 0x10, ttl 64, id 45034, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.100.17006 > 172.31.16.20.5222: Flags [S], cksum 0x78e5 (incorrect -> 0xf906), seq 1028496387, win 29200, options [mss 1460,sackOK,TS val 2372585 ecr 0,nop,wscale 7], length 0
12:59:02.000831 IP (tos 0x10, ttl 64, id 45035, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.100.17006 > 172.31.16.20.5222: Flags [S], cksum 0x78e5 (incorrect -> 0xf80c), seq 1028496387, win 29200, options [mss 1460,sackOK,TS val 2372835 ecr 0,nop,wscale 7], length 0
12:59:04.004827 IP (tos 0x10, ttl 64, id 45036, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.100.17006 > 172.31.16.20.5222: Flags [S], cksum 0x78e5 (incorrect -> 0xf617), seq 1028496387, win 29200, options [mss 1460,sackOK,TS val 2373336 ecr 0,nop,wscale 7], length 0
12:59:08.012822 IP (tos 0x10, ttl 64, id 45037, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.100.17006 > 172.31.16.20.5222: Flags [S], cksum 0x78e5 (incorrect -> 0xf22d), seq 1028496387, win 29200, options [mss 1460,sackOK,TS val 2374338 ecr 0,nop,wscale 7], length 0
12:59:16.036831 IP (tos 0x10, ttl 64, id 45038, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.100.17006 > 172.31.16.20.5222: Flags [S], cksum 0x78e5 (incorrect -> 0xea57), seq 1028496387, win 29200, options [mss 1460,sackOK,TS val 2376344 ecr 0,nop,wscale 7], length 0
12:59:32.068840 IP (tos 0x10, ttl 64, id 45039, offset 0, flags [DF], proto TCP (6), length 60)
172.31.16.100.17006 > 172.31.16.20.5222: Flags [S], cksum 0x78e5 (incorrect -> 0xdaaf), seq 1028496387, win 29200, options [mss 1460,sackOK,TS val 2380352 ecr 0,nop,wscale 7], length 0
Я пробовал это в / etc / network / interfaces:
auto eth0:0
iface eth0:0 inet static
address 172.31.16.100
netmask 255.255.240.0
broadcast 172.31.31.255
network 172.31.16.0
gateway 172.31.16.1
auto eth0:1
iface eth0:1 inet static
address 172.31.16.101
netmask 255.255.240.0
broadcast 172.31.31.255
network 172.31.16.0
gateway 172.31.16.1
Когда я перезапускаю сеть, это не действует. Кроме того, когда я перезагружаю машину, я тоже не могу использовать ssh снова. Кажется, что-то тут вступает в силу, но явно не так.
Я также использовал CLI sudo ifconfig:
$ sudo ifconfig eth0:0 172.31.16.100 netmask 255.255.240.0 broadcast 172.31.31.255 up
$ sudo ifconfig eth0:1 172.31.16.101 netmask 255.255.240.0 broadcast 172.31.31.255 up
где мой псевдоним IP вступает в силу немедленно:
$ ifconfig
eth0 Link encap:Ethernet HWaddr 0a:64:bd:67:d6:4a
inet addr:172.31.16.15 Bcast:172.31.31.255 Mask:255.255.240.0
inet6 addr: fe80::864:bdff:fe67:d64a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1224 errors:0 dropped:0 overruns:0 frame:0
TX packets:943 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:93498 (93.4 KB) TX bytes:118463 (118.4 KB)
eth0:0 Link encap:Ethernet HWaddr 0a:64:bd:67:d6:4a
inet addr:172.31.16.100 Bcast:172.31.31.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0:1 Link encap:Ethernet HWaddr 0a:64:bd:67:d6:4a
inet addr:172.31.16.101 Bcast:172.31.31.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
таблица маршрутизации по-прежнему выглядит так же:
$ 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
но опять же, я не могу использовать telnet, как описано выше для [2] и [3].
Кроме того, после ввода следующих команд (и очистки таблиц маршрутизации):
echo 200 EJ0 >> /etc/iproute2/rt_tables
echo 201 EJ1 >> /etc/iproute2/rt_tables
ip route add 172.31.16.0 dev eth0:0 src 172.31.16.100 table EJ0
ip route add default via 172.31.16.1 table EJ0
ip route add 172.31.16.0 dev eth0:1 src 172.31.16.101 table EJ1
ip route add default via 172.31.16.1 table EJ1
ip route add 172.31.16.0 dev eth0:0 src 172.31.16.100
ip route add 172.31.16.0 dev eth0:1 src 172.31.16.101
ip rule add from 172.31.16.100 table EJ0
ip rule add from 172.31.16.101 table EJ1
в ping
и telnet
команды по-прежнему не работают.
Больше информации:
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 0a:64:bd:67:d6:4a brd ff:ff:ff:ff:ff:ff
inet 172.31.16.15/20 brd 172.31.31.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.31.16.100/20 brd 172.31.31.255 scope global secondary eth0:0
valid_lft forever preferred_lft forever
inet 172.31.16.101/20 brd 172.31.31.255 scope global secondary eth0:1
valid_lft forever preferred_lft forever
inet6 fe80::864:bdff:fe67:d64a/64 scope link
valid_lft forever preferred_lft forever
и
$ ip route show
default via 172.31.16.1 dev eth0
172.31.16.0 dev eth0 scope link src 172.31.16.100
172.31.16.0/20 dev eth0 proto kernel scope link src 172.31.16.15
Это все для того, чтобы HAProxy мог успешно подключиться к экземпляру ejabberd, но делать это с двух разных IP-адресов src (eth0: 0 и eth0: 1).
Любые советы приветствуются и приветствуются.
Использование псевдонимов IP действительно возможно с Amazon EC2 VPC !!
Если вы используете Ubuntu Linux (например, я сейчас), вам все равно нужно добавить псевдоним IP, как обычно для Linux. НО решающей частью является также выполнение ДОПОЛНИТЕЛЬНО настройка его на Сама консоль Amazon EC2 как показано здесь Несколько частных IP-адресов.
Спасибо всем за ваши комментарии и вклад.
Подобно маршрутизации, когда Linux находит несколько объектов в одной сети, он будет использовать первый соответствующий маршрут / интерфейс, чтобы добраться туда. В данном случае это eth0
и 172.31.16.15
.
Чтобы Linux мог использовать эти псевдонимы как исходные адреса, так и как полностью функциональные интерфейсы, вам необходимо создать несколько таблиц маршрутизации, по одной для каждого виртуального интерфейса.
echo 200 EJ0 >> /etc/iproute2/rt_tables
echo 201 EJ1 >> /etc/iproute2/rt_tables
Добавить маршруты
ip route add 172.31.16.0 dev eth0:0 src 172.31.16.100 table EJ0
ip route add default via 172.31.16.1 table EJ0
ip route add 172.31.16.0 dev eth0:1 src 172.31.16.101 table EJ1
ip route add default via 172.31.16.1 table EJ1
Тогда расскажи основную таблицу.
ip route add 172.31.16.0 dev eth0:0 src 172.31.16.100
ip route add 172.31.16.0 dev eth0:1 src 172.31.16.101
затем добавьте правила
ip rule add from 172.31.16.100 table EJ0
ip rule add from 172.31.16.101 table EJ1
Многие из них взяты из когда-либо полезных политика маршрутизации Linux страница