Код: Выделить всё
Machine 1 Machine 2 Machine 3
----------------------- ------------------------ -----------------------
| eth0: 172.17.0.1/16 |======| eth0: 172.17.0.2/16 | | |
| | | | | |
| | | eth1: 172.18.0.2/16 |======| eth0: 172.18.0.1/16 |
----------------------- ------------------------ -----------------------
< /code>
И я использую Smcroute, чтобы добавить маршрут на машине 2 для маршрута трафика, предназначенного для многоадресной группы 239.255.0.1 от машины 1 до машины 3: < /p>
smcroutectl add eth0 239.255.0.1 eth1
< /code>
И я включил IP -маскирую интерфейс Eth1 на машине 2: < /p>
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
< /code>
и я подписываюсь на эту группу на машине 3: < /p>
smcroutectl join eth0 239.255.0.1
< /code>
Тогда я думаю, что должен быть в состоянии пинг этот многоадресный адрес с машины 1 с < /p>
ping 239.255.0.1 -t 2
< /code>
Используя tcpdump, я получаю это через Eth1 на машине 2: < /p>
00:35:19.798686 IP 172.18.0.2 > 239.255.0.1: ICMP echo request, id 133, seq 12, length 64
00:35:19.798739 IP 172.18.0.1 > 172.18.0.2: ICMP echo reply, id 133, seq 12, length 64
/# conntrack -L
icmp 1 29 src=172.17.0.1 dst=239.255.0.1 type=8 code=0 id=130 [UNREPLIED] src=239.255.0.1 dst=172.18.0.2 type=0 code=0 id=130 mark=0 use=1
conntrack v1.4.6 (conntrack-tools): 1 flow entries have been shown.
< /code>
Но ядро будет реагировать на многоадресные пинги с помощью IP интерфейса, на котором мы присоединились к группе, поэтому ответ будет отброшен на машине 2. Как я могу обойти это и получить Echo ответ обратно на машину 1?
Подробнее здесь: https://stackoverflow.com/questions/794 ... n-the-repl