Я создаю кластер в Google Compute Engine, и в настоящее время я должен добавить статический маршрут к другой машине в той же сети, но что-то идет не так, как надо, и я получаю ошибку "ответы RTNETLINK: Сеть недостижима".
Важное примечание: Я не сетевой эксперт, и я, вероятно, делаю некоторые основные ошибки в процессе.
У меня есть машина A и машина B, где A имеет подсеть 11.10.0.0/16 с другими машинами B, не может достигнуть, таким образом, A будет шлюзом B им. У обоих есть флаг IP forwarding
активный и находятся в той же сети (использующий eth0 на обоих) и может достигнуть другого непосредственно.
Команда и ошибка (выполняемый на B):
B:~$ sudo ip route add 11.10.0.0/16 via 10.240.0.8 dev eth0 RTNETLINK answers: Network is unreachable
A:~$ ip route list default via 10.240.0.1 dev eth0 10.240.0.1 dev eth0 scope link 11.10.0.0/16 via 11.10.0.2 dev tun0 11.10.0.2 dev tun0 proto kernel scope link src 11.10.0.1 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
A:~$ ip addr 1: lo: 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 2: eth0: mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:00:08 brd ff:ff:ff:ff:ff:ff inet 10.240.0.8/32 brd 10.240.0.8 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:7d:6d:9b:0b brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever 7: tun0: mtu 1500 qdisc pfifo_fast state UP group default qlen 100 link/none inet 11.10.0.1 peer 11.10.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
A:~$ sudo iptables --list -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere !loopback/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 172.17.0.0/16 anywhere Chain DOCKER (2 references) target prot opt source destination
A:~$ sudo iptables --list -t filter Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination
B:~$ ip route default via 10.240.0.1 dev eth0 10.240.0.1 dev eth0 scope link 11.11.0.0/16 via 11.11.0.2 dev tun0 11.11.0.2 dev tun0 proto kernel scope link src 11.11.0.1 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
B:~$ ip addr 1: lo: 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 2: eth0: mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:00:07 brd ff:ff:ff:ff:ff:ff inet 10.240.0.7/32 brd 10.240.0.7 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: mtu 1460 qdisc noqueue state DOWN group default link/ether 02:42:b0:25:d5:57 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever 17: tun0: mtu 1500 qdisc pfifo_fast state UP group default qlen 100 link/none inet 11.11.0.1 peer 11.11.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
B:~$ sudo iptables --list -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere !loopback/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 172.17.0.0/16 anywhere Chain DOCKER (2 references) target prot opt source destination
B:~$ sudo iptables --list -t filter Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination
Я надеюсь, что дал достаточно информации о проблеме.
Виртуальная сеть, которую вы получаете в экземпляре GCE, фактически представляет собой сеть / 32
, к которой присоединены только сам экземпляр и шлюз (последний настраивается с помощью хоста маршрут). Это означает, что весь исходящий трафик отправляется на шлюз.
Это причина того, что вы получаете следующую ошибку:
B:~$ sudo ip route add 11.10.0.0/16 via 10.240.0.8 dev eth0
RTNETLINK answers: Network is unreachable
Ошибка просто сообщает вам, что нет хоста или сетевого маршрута, который соответствует 10.240.0.8
(кроме маршрута по умолчанию, который использует сам шлюз).
Невозможно настроить желаемую конфигурацию с использованием конфигурации маршрутизации на хостах. Вместо этого вам нужно настроить маршрутизацию в самом GCE, как описано здесь . Концептуально это можно представить как настройку таблицы маршрутизации на шлюзе. Вам не нужна дополнительная настройка хостов, потому что, как объяснено выше, они отправляют все исходящие пакеты на шлюз.