Привет, народ! Я тут поколдовал с Mikrotik и функцией перенаправления ICMP. Просто эксперимент, ничего серьезного. У меня настроена простая сеть вот так: 172.16.0.0/23 ---- MIKROTIK ---- 10.0.0.0/24 ---- GW 10.0.0.254. Я настроил шлюз на Mikrotik как 10.0.0.254 и NAT’ил сеть 172.16.0.0/23 на IP-адрес, принадлежащий сети 10.0.0.0/24, чтобы она могла выходить в интернет.
Вот конфигурация IP:
```
ADDRESS NETWORK BROADCAST INTERFACE
0 ;;; HOME LAN 172.16.0.1/23 172.16.0.0 172.16.0.255 MYLAN
1 ;;; interneti 10.0.0.252/24 10.0.0.0 10.0.0.255 INTERNET
```
Вот NAT:
```
1 src-address=172.16.0.0/23 action=nat to-src-address=10.0.0.252
```
Вот маршруты:
```
DST-ADDRESS G GATEWAY DISTANCE INTERFACE
2 S 0.0.0.0/0 r 10.0.0.254 1 INTERNET
4 DC 172.16.0.0/23 r 0.0.0.0 0 MYLAN
5 DC 10.0.0.0/24 r 0.0.0.0 0 INTERNET
```
Эта настройка работает отлично. Но я изменил шлюз на Mikrotik на 10.0.0.253, который, как оказалось, Linux-сервер с включенным пересылкой IP.
Пересылка IP включена: `net.ipv4.ip_forward = 1`
Вот таблица маршрутизации Linux:
```
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.0.0.254 0.0.0.0 UG 0 0 0 eth0
```
Обычно, когда трафик направляется на этот хост, он отправляет ICMP-сообщение о перенаправлении, указывающее, что это не лучший получатель сообщения, и возвращает следующее сообщение:
```
Sep 4 02:48:01 linuxi kernel: IN=eth0 OUT=eth0 SRC=10.0.0.253 DST=10.0.0.252 LEN=573 TOS=0x00 PREC=0xC0 TTL=64 ID=32847 PROTO=ICMP TYPE=5 CODE=1 GATEWAY=10.0.0.254
```
Но оказывается, Mikrotik все равно продолжает отправлять трафик на 10.0.0.253, даже после получения ICMP-сообщения о перенаправлении, что видно из этого лога:
```
Sep 4 03:01:38 nikonet kernel: IN=eth0 OUT=eth0 SRC=10.0.0.252 DST=159.148.147.196 LEN=40 TOS=0x00 PREC=0x00 TTL=126 ID=50890 DF PROTO=TCP SPT=3597 DPT=80 WINDOW=64240 RES=0x00 ACK FIN URGP=0
```
И так далее, с аналогичными логами.
Вопрос в том: должен ли Mikrotik изменить свой шлюз обратно на 10.0.0.254 после получения ICMP-сообщения о перенаправлении или что-то еще? Может, мне нужно больше почитать документацию?
Кстати, я видел, как машина с Windows XP меняла свой шлюз (она не была настроена как маршрутизатор).
Вот конфигурация IP:
```
ADDRESS NETWORK BROADCAST INTERFACE
0 ;;; HOME LAN 172.16.0.1/23 172.16.0.0 172.16.0.255 MYLAN
1 ;;; interneti 10.0.0.252/24 10.0.0.0 10.0.0.255 INTERNET
```
Вот NAT:
```
1 src-address=172.16.0.0/23 action=nat to-src-address=10.0.0.252
```
Вот маршруты:
```
DST-ADDRESS G GATEWAY DISTANCE INTERFACE
2 S 0.0.0.0/0 r 10.0.0.254 1 INTERNET
4 DC 172.16.0.0/23 r 0.0.0.0 0 MYLAN
5 DC 10.0.0.0/24 r 0.0.0.0 0 INTERNET
```
Эта настройка работает отлично. Но я изменил шлюз на Mikrotik на 10.0.0.253, который, как оказалось, Linux-сервер с включенным пересылкой IP.
Пересылка IP включена: `net.ipv4.ip_forward = 1`
Вот таблица маршрутизации Linux:
```
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.0.0.254 0.0.0.0 UG 0 0 0 eth0
```
Обычно, когда трафик направляется на этот хост, он отправляет ICMP-сообщение о перенаправлении, указывающее, что это не лучший получатель сообщения, и возвращает следующее сообщение:
```
Sep 4 02:48:01 linuxi kernel: IN=eth0 OUT=eth0 SRC=10.0.0.253 DST=10.0.0.252 LEN=573 TOS=0x00 PREC=0xC0 TTL=64 ID=32847 PROTO=ICMP TYPE=5 CODE=1 GATEWAY=10.0.0.254
```
Но оказывается, Mikrotik все равно продолжает отправлять трафик на 10.0.0.253, даже после получения ICMP-сообщения о перенаправлении, что видно из этого лога:
```
Sep 4 03:01:38 nikonet kernel: IN=eth0 OUT=eth0 SRC=10.0.0.252 DST=159.148.147.196 LEN=40 TOS=0x00 PREC=0x00 TTL=126 ID=50890 DF PROTO=TCP SPT=3597 DPT=80 WINDOW=64240 RES=0x00 ACK FIN URGP=0
```
И так далее, с аналогичными логами.
Вопрос в том: должен ли Mikrotik изменить свой шлюз обратно на 10.0.0.254 после получения ICMP-сообщения о перенаправлении или что-то еще? Может, мне нужно больше почитать документацию?
Кстати, я видел, как машина с Windows XP меняла свой шлюз (она не была настроена как маршрутизатор).
