Tôi đang xây dựng một cụm trong Google Compute Engine và hiện tôi cần thêm một tuyến tĩnh vào một máy khác trong cùng một mạng, nhưng đã xảy ra sự cố và tôi gặp lỗi "RTNETLINK answers: Mạng không thể truy cập được".

Lưu ý quan trọng : Tôi không phải là chuyên gia mạng và có thể tôi đang mắc một số lỗi cơ bản trong quá trình này.

Tôi có một máy A và một máy B, trong đó A có mạng con 11.10.0.0/16 với các máy khác B không thể kết nối được, vì vậy A sẽ là cổng của B vào chúng. Cả hai đều có cờ IP forwardingđang hoạt động và nằm trong cùng một mạng (sử dụng eth0 trên cả hai) và có thể kết nối trực tiếp với người kia.

Lệnh và lỗi (được thực thi trên B) là:

B:~$ sudo ip route add 11.10.0.0/16 via 10.240.0.8 dev eth0
RTNETLINK answers: Network is unreachable

Máy chủ A

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

Máy chủ B

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

Tôi hy vọng tôi đã cung cấp đủ thông tin về vấn đề này.

answer

Mạng ảo mà bạn nhận được trên một cá thể GCE thực sự là một /32mạng mà chỉ bản thân cá thể đó và cổng vào được gắn vào (cái sau được định cấu hình bằng cách sử dụng một tuyến máy chủ). Điều này có nghĩa là tất cả lưu lượng đi được gửi đến cổng.

Đó là lý do tại sao bạn gặp lỗi sau:

B:~$ sudo ip route add 11.10.0.0/16 via 10.240.0.8 dev eth0
RTNETLINK answers: Network is unreachable

Lỗi chỉ cho bạn biết rằng không có máy chủ lưu trữ hoặc tuyến mạng nào phù hợp 10.240.0.8(ngoài tuyến mặc định sử dụng chính cổng).

Không có cách nào để thiết lập cấu hình mong muốn của bạn bằng cách sử dụng cấu hình định tuyến trên máy chủ. Thay vào đó, bạn cần phải cấu hình định tuyến trong chính GCE, như được mô tả ở đây . Về mặt khái niệm, bạn có thể coi đây là cấu hình bảng định tuyến trên cổng. Bạn không cần bất kỳ cấu hình bổ sung nào trên các máy chủ vì như đã giải thích ở trên, chúng gửi tất cả các gói đi đến cổng.