LINUX.ORG.RU
решено ФорумAdmin

Маршрутизация для подсети


0

2

IP-маршрутизация всегда была моим слабым местом, и я до сих пор считаю декларирование маршрутов чем-то непонятным и похожим на чёрную магию.

Вот например прямо сейчас у меня подняты два сетевых интерфейса: p7p1 (Fedora дала странное имя Ethernet-интерфейсу) и tun0 (OpenVPN-туннель с PtP-адресом 192.168.100.110). Для того, чтобы указать, чтобы трафик по адресу 195.19.132.177 летел через 192.168.100.110, а не через мой основной шлюз, я указываю вот такой роут и всё работает:

# ip route add 195.19.132.177 via 192.168.100.110
# ip route | grep tun0
172.16.0.0/16 via 192.168.100.110 dev tun0 
192.168.100.0/24 via 192.168.100.110 dev tun0 
192.168.100.1 via 192.168.100.110 dev tun0 
192.168.100.110 dev tun0  proto kernel  scope link  src 192.168.100.109 
195.19.132.177 via 192.168.100.110 dev tun0

Однако мне хотелось бы прописать маршрут для всей подсети (195.19.132.0/24, если ничего не путаю). Делаю вот такую штуку:

# ip route add 195.19.132.0/24 via 192.168.100.110
# ip route | grep tun0                            
172.16.0.0/16 via 192.168.100.110 dev tun0 
192.168.100.0/24 via 192.168.100.110 dev tun0 
192.168.100.1 via 192.168.100.110 dev tun0 
192.168.100.110 dev tun0  proto kernel  scope link  src 192.168.100.109 
195.19.132.0/24 via 192.168.100.110 dev tun0

Но не вижу, чтобы у меня после этого получалось, например, установить SSH-соединение с хостом 195.19.132.177.

Где я неправ?

★★

Последнее исправление: eveel (всего исправлений: 2)

Ответ на: комментарий от adriano32

> ничего не смущает?

Нет, это я просто криво скопипастил.

eveel ★★
() автор топика
Ответ на: комментарий от adriano32

он просто ошибся в копипасте - в таблице все ок

dreamer ★★★★★
()

> установить SSH-соединение с хостом 195.19.132.177.

а хост 195.19.132.177 знает про сеть 192.168.100.0/24 ?

dreamer ★★★★★
()
Ответ на: комментарий от dreamer
# traceroute 195.19.132.177
traceroute to 195.19.132.177 (195.19.132.177), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
    ещё много пустых хопов
29  * * *
30  * * *
eveel ★★
() автор топика
Ответ на: комментарий от dreamer

Не особо. Вот всё, что он знает:

% ip route
195.19.132.0/23 dev eth0  proto kernel  scope link  src 195.19.132.177 
default via 195.19.132.65 dev eth0

Хотя мне кажется, не в этом дело: ведь получается же указать маршрут для одного хоста.

eveel ★★
() автор топика
Ответ на: комментарий от eveel

да, очень странно...

можете еще раз перебить маршруты?

1. route del (все почистить)
2. route -n
3. route add -host
4. tracetoute -n
5. route del ..
6. route add -net
7. route -n
8. traceroute -n

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

Удалил все роуты, выставленные вручную. После этого выполнил:

# route add -host 195.19.132.177 gw 192.168.100.110
# traceroute -n 195.19.132.177 
traceroute to 195.19.132.177 (195.19.132.177), 30 hops max, 60 byte packets
 1  192.168.100.1  1.857 ms  3.889 ms  44.994 ms
 2  195.19.132.177  44.826 ms !X  44.819 ms !X  44.883 ms !X

Интересное дело, у нас всё хорошо. Теперь сносим роут и пробуем с подсетью:

# route add -net 195.19.132.0/24 gw 192.168.100.110
# traceroute -n 195.19.132.177                             
traceroute to 195.19.132.177 (195.19.132.177), 30 hops max, 60 byte packets
 1  * * *
     ...
30  * * *

Непорядок.

eveel ★★
() автор топика
Ответ на: комментарий от dreamer

Конечно.

# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.100.109  P-t-P:192.168.100.110  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:360 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:3845 (3.7 KiB)  TX bytes:23994 (23.4 KiB)
eveel ★★
() автор топика
Ответ на: комментарий от eveel

а адрес openvpn сервера не из 195.19.132.0/24 сети ?

и кстати, попробуйте вот что - после добавления маршрута в сеть, запустите tcpdump:

tcpdump -i any -n -q host 195.19.132.177
а потом, допустим, ping 195.19.132.177

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

Нет, адрес VPN-сервера находится в той же самой подсети, что и нужная машина.

Прямой маршрут до хоста:

# route add -host 195.19.132.177 gw 192.168.100.110
# tcpdump -i any -n -q host 195.19.132.177 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
23:38:56.523395 IP 192.168.100.109 > 195.19.132.177: ICMP echo request, id 3172, seq 1, length 64
23:38:56.526805 IP 195.19.132.177 > 192.168.100.109: ICMP echo reply, id 3172, seq 1, length 64

Маршрут до подсети:

# route add -net 195.19.132.0/24 gw 192.168.100.110
# tcpdump -i any -n -q host 195.19.132.177 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
23:40:03.666552 IP 192.168.100.109 > 195.19.132.177: ICMP echo request, id 3182, seq 1, length 64
23:40:04.665689 IP 192.168.100.109 > 195.19.132.177: ICMP echo request, id 3182, seq 2, length 64
23:40:05.665681 IP 192.168.100.109 > 195.19.132.177: ICMP echo request, id 3182, seq 3, length 64
23:40:06.665691 IP 192.168.100.109 > 195.19.132.177: ICMP echo request, id 3182, seq 4, length 64

Весьма безответно.

eveel ★★
() автор топика
Ответ на: комментарий от eveel

после прописывания всех машрутов... покажи куда надумала слать пакет твоя ОС...

ip r g 195.19.132.177

а на другой стороне

ip r g 192.168.100.109

если нечего ненапутал

Tok ★★
()
Ответ на: комментарий от eveel

в tcpdump вместо any поставь по очереди оба интерфейса и запости вывод. хотя по таблице он должен был бы через впн идти, но тут явно что-то не нормально. хорошо бы еще дамп с принимающей стороны или роутера, если есть такая возможность.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

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

xscrew ★★
()
Ответ на: комментарий от Tok

Попробовал.

До прописывания маршрута:

# ip r g 195.19.132.177
195.19.132.177 via 192.168.1.1 dev p7p1  src 192.168.1.2 
    cache  ipid 0xabed

После прописывания прямого маршрута до хоста 195.19.132.177:

# ip r g 195.19.132.177
195.19.132.177 via 192.168.100.110 dev tun0  src 192.168.100.109 
    cache  ipid 0xabed

После сноса предыдущего маршрута и прописывания маршрута до подсети 195.19.132.0/24:

# ip r g 195.19.132.177
195.19.132.177 via 192.168.100.110 dev tun0  src 192.168.100.109 
    cache  ipid 0xabed

Мне кажется, или последние два вывода совпадают?

eveel ★★
() автор топика
Ответ на: комментарий от val-amart

> в tcpdump вместо any поставь по очереди оба интерфейса и запости вывод

То, что я постил выше — не то?

eveel ★★
() автор топика
Ответ на: комментарий от berrywizard

> А в конфигурации (скорее, клиентского) openvpn'а не накосячено?

На что стоит обратить внимание?

eveel ★★
() автор топика
Ответ на: комментарий от eveel

>> в tcpdump вместо any поставь по очереди оба интерфейса и запости вывод

То, что я постил выше — не то?

не то

tcpdump -i tun0 ....

хотя бы узнаешь через какой интерфейс уходит пакет

redixin ★★★★
()
Ответ на: комментарий от redixin

Как и ожидалось, трафик летит через tun0. Вывод tcpdump для двух случаев радикально отличается.

При прямом маршруте:

root@tazik{/home/eveel}# tcpdump -i tun0                                 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
20:59:37.409291 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [S], seq 1927160106, win 14600, options [mss 1460,sackOK,TS val 4000089 ecr 0,nop,wscale 4], length 0
20:59:37.413094 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [S.], seq 752867320, ack 1927160107, win 5792, options [mss 1367,sackOK,TS val 468038932 ecr 4000089,nop,wscale 6], length 0
20:59:37.413145 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [.], ack 1, win 913, options [nop,nop,TS val 4000093 ecr 468038932], length 0
20:59:37.443177 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [P.], seq 1:22, ack 1, win 91, options [nop,nop,TS val 468038963 ecr 4000093], length 21
20:59:37.443239 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [.], ack 22, win 913, options [nop,nop,TS val 4000123 ecr 468038963], length 0
20:59:37.443581 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [P.], seq 1:22, ack 22, win 913, options [nop,nop,TS val 4000124 ecr 468038963], length 21
20:59:37.486647 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [.], ack 22, win 91, options [nop,nop,TS val 468039007 ecr 4000124], length 0
20:59:37.486701 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [P.], seq 22:926, ack 22, win 913, options [nop,nop,TS val 4000167 ecr 468039007], length 904
20:59:37.489821 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [.], ack 926, win 119, options [nop,nop,TS val 468039010 ecr 4000167], length 0
20:59:37.532032 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [P.], seq 22:806, ack 926, win 119, options [nop,nop,TS val 468039015 ecr 4000167], length 784
20:59:37.533742 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [P.], seq 926:950, ack 806, win 1011, options [nop,nop,TS val 4000214 ecr 468039015], length 24
20:59:37.539277 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [P.], seq 806:958, ack 950, win 119, options [nop,nop,TS val 468039059 ecr 4000214], length 152
20:59:37.541312 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [P.], seq 950:1094, ack 958, win 1109, options [nop,nop,TS val 4000221 ecr 468039059], length 144
20:59:37.562249 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [P.], seq 958:1678, ack 1094, win 147, options [nop,nop,TS val 468039075 ecr 4000221], length 720
20:59:37.565406 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [P.], seq 1094:1110, ack 1678, win 1207, options [nop,nop,TS val 4000246 ecr 468039075], length 16
20:59:37.607370 IP 195.19.132.177.ssh > 192.168.100.109.56628: Flags [.], ack 1110, win 147, options [nop,nop,TS val 468039128 ecr 4000246], length 0
20:59:37.607423 IP 192.168.100.109.56628 > 195.19.132.177.ssh: Flags [P.], seq 1110:1158, ack 1678, win 1207, options [nop,nop,TS val 4000288 ecr 468039128], length 48

При маршруте до подсети:

# tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
20:54:39.900310 IP 192.168.100.109.56565 > 195.19.132.177.ssh: Flags [S], seq 2085694954, win 14600, options [mss 1460,sackOK,TS val 3702580 ecr 0,nop,wscale 4], length 0
20:54:39.901766 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 2963195022:2963195125, ack 1926146467, win 1998, options [nop,nop,TS val 3702582 ecr 299419607], length 103
20:54:40.116300 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3702797 ecr 299419607], length 103
20:54:40.547340 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3703228 ecr 299419607], length 103
20:54:41.409312 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3704090 ecr 299419607], length 103
20:54:42.903306 IP 192.168.100.109.56565 > 195.19.132.177.ssh: Flags [S], seq 2085694954, win 14600, options [mss 1460,sackOK,TS val 3705584 ecr 0,nop,wscale 4], length 0
20:54:43.135289 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3705816 ecr 299419607], length 103
20:54:46.583318 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3709264 ecr 299419607], length 103
20:54:48.919303 IP 192.168.100.109.56565 > 195.19.132.177.ssh: Flags [S], seq 2085694954, win 14600, options [mss 1460,sackOK,TS val 3711600 ecr 0,nop,wscale 4], length 0
20:54:53.479299 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3716160 ecr 299419607], length 103
20:55:00.935309 IP 192.168.100.109.56565 > 195.19.132.177.ssh: Flags [S], seq 2085694954, win 14600, options [mss 1460,sackOK,TS val 3723616 ecr 0,nop,wscale 4], length 0
20:55:07.271306 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3729952 ecr 299419607], length 103
20:55:24.967302 IP 192.168.100.109.56565 > 195.19.132.177.ssh: Flags [S], seq 2085694954, win 14600, options [mss 1460,sackOK,TS val 3747648 ecr 0,nop,wscale 4], length 0
20:55:34.887299 IP 192.168.1.2.52021 > umt.imm.uran.ru.openvpn: Flags [P.], seq 0:103, ack 1, win 1998, options [nop,nop,TS val 3757568 ecr 299419607], length 103

Понятия не имею, что тут написано :/

eveel ★★
() автор топика
Ответ на: комментарий от eveel

похоже что туннель ломается, т к endpoint находится в маршрутизируемой подсети.

вспомнилась задачка про курицу и яйцо

redixin ★★★★
()
Ответ на: комментарий от eveel

короче, тебе нужно прописать еще один роут — опенвпн-сервер через твой основной шлюз

ip route add 195.19.132.0/24 via 192.168.100.110 ip r add 195.19.132.XXX via 195.19.132.65 dev eth0

где 195.19.132.XXX — адрес впн сервера

redixin ★★★★
()
Ответ на: комментарий от eveel

>адрес VPN-сервера находится в той же самой подсети, что и нужная машина.

в этом все и дело! после прописывания роута для всей /24 сети в тунель, сам VPN сервер, который находится в этой же /24 сети ес-но становится недоступным, т.к. пакеты до него тоже пытаются уйти в тунель.

Как сказали выше, нужно прописать более специфичный маршрут до vpn сервера :

route add -host VPN_SERVER gw DEFAULT_GW

dreamer ★★★★★
()
Ответ на: комментарий от redixin

Черт, звучит очень просто. Пробую:

# ip r add 195.19.132.0/24 via 192.168.100.110
# ip r add 195.19.132.6 via 195.19.132.65 dev p7p1
RTNETLINK answers: No such process

По-моему, что-то здесь не так.

eveel ★★
() автор топика
Ответ на: комментарий от dreamer

Пробую:

route add -net 195.19.132.0/24 gw 192.168.100.110
route add -host 195.19.132.6 gw 195.19.132.65 dev p7p1
SIOCADDRT: Нет такого процесса

Блин.

eveel ★★
() автор топика
Ответ на: комментарий от eveel

достаточно указать просто интерфейс -

route add -host 195.19.132.6 dev p7p1

dreamer ★★★★★
()
Ответ на: комментарий от swelf

Да!

Понял, в чём проблема: маршрут до VPN-сервера должен лететь через дефолтный шлюз обычного соединения.

# ip r add 195.19.132.0/24 via 192.168.100.110
# ip r add 195.19.132.6 via 192.168.1.1

Спасибо!

LOR - ИММ УрО РАН — 1:0

eveel ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.