web-dev-qa-db-ja.com

インターフェイスのネットワーク範囲外にデフォルトゲートウェイを設定するにはどうすればよいですか?

私はいつも、デフォルトゲートウェイはインターネットに接続しようとしているサーバー/クライアントと同じネットワーク上になければならないと思っていました。しかし、今日私はヘッツナーからサーバーを借りました、そして、私が思うように、デフォルトゲートウェイが間違いなく同じネットワークに接続されていなくても、サーバーはインターネットに接続することができます。また、ネットマスクは/ 32に設定されているようです。

root@test:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 138.201.187.120  netmask 255.255.255.255  broadcast 138.201.187.120
        inet6 fe80::9400:ff:fe3b:eece  prefixlen 64  scopeid 0x20<link>
        inet6 2a01:4f8:c17:69b0::1  prefixlen 64  scopeid 0x0<global>
        ether 96:00:00:3b:ee:ce  txqueuelen 1000  (Ethernet)
        RX packets 1166  bytes 638244 (638.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 653  bytes 92539 (92.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<Host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 112  bytes 8824 (8.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112  bytes 8824 (8.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@test:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.1.1      0.0.0.0         UG    0      0        0 eth0
172.31.1.1      0.0.0.0         255.255.255.255 UH    0      0        0 eth0
root@test:~# ip route
default via 172.31.1.1 dev eth0
172.31.1.1 dev eth0 scope link
root@test:~# ping ipv4.google.com
PING ipv4.l.google.com (172.217.21.238) 56(84) bytes of data.
64 bytes from fra16s13-in-f14.1e100.net (172.217.21.238): icmp_seq=1 ttl=54 time=4.83 ms
64 bytes from fra16s13-in-f14.1e100.net (172.217.21.238): icmp_seq=2 ttl=54 time=4.96 ms
64 bytes from fra16s13-in-f14.1e100.net (172.217.21.238): icmp_seq=3 ttl=54 time=5.01 ms
^C
--- ipv4.l.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 4.837/4.938/5.010/0.073 ms
root@test:~#
root@test:~# traceroute ipv4.google.com
traceroute to ipv4.google.com (216.58.207.78), 30 Hops max, 60 byte packets
 1  _gateway (172.31.1.1)  0.139 ms  0.091 ms  0.062 ms
 2  12643.your-cloud.Host (136.243.182.17)  0.320 ms  0.103 ms  0.075 ms
 3  * * *
 4  213-239-251-233.clients.your-server.de (213.239.251.233)  1.479 ms 213-239-251-237.clients.your-server.de (213.239.251.237)  0.722 ms  1.320 ms
 5  core21.fsn1.hetzner.com (213.239.239.125)  0.417 ms  0.310 ms  0.278 ms
 6  core4.fra.hetzner.com (213.239.245.18)  5.536 ms core4.fra.hetzner.com (213.239.245.14)  4.880 ms core0.fra.hetzner.com (213.239.252.33)  5.539 ms
 7  72.14.218.94 (72.14.218.94)  5.094 ms  5.085 ms  5.113 ms
 8  108.170.251.193 (108.170.251.193)  5.018 ms * 108.170.252.65 (108.170.252.65)  6.311 ms
 9  108.170.235.246 (108.170.235.246)  7.428 ms 72.14.232.50 (72.14.232.50)  4.903 ms 72.14.234.227 (72.14.234.227)  4.951 ms
10  108.170.252.18 (108.170.252.18)  5.287 ms fra16s25-in-f14.1e100.net (216.58.207.78)  4.804 ms 108.170.251.145 (108.170.251.145)  5.646 ms
root@test:~#

ありがとう!

2
Rick McClatchie

正確には、ゲートウェイはコンピュータと同じ物理ネットワーク上にある必要があります。ゲートウェイに到達する(または実際にはネットワーク上の任意のコンピュータに到達する)には、ARPパッケージを送信する必要があるためです。このため、ローカルネットワークには、「オンリンク」コンピュータを定義するルートエントリが必要です。より一般的なネットワーク設定のルートエントリは次のようになります。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.193.254 0.0.0.0         UG    0      0        0 enp0s3
192.168.193.0   0.0.0.0         255.255.255.0   U     0      0        0 enp0s3

2行目からわかるように、ゲートウェイサーバーに到達する方法は明確に定義されています。 Gateway列は0.0.0.0です。これは、「これらのアドレスにゲートウェイを使用しない」ことを意味するため、これらのアドレスを直接使用できるように定義します。残念ながら、route -nの出力はこの意味で直感的ではありませんが、代わりにip routeを使用すると、やや単純な表現が表示されます。

default via 192.168.193.254 dev enp0s3
192.168.193.0/24 dev enp0s3 scope link

ここで、dev enp0s3 scope linkは、「これはenp0s3デバイスとリンクしているため、デバイスから直接アクセスできる」ことを意味します。ゲートウェイ自体はそのサブネット内にあるため、コンピューターはゲートウェイに直接到達できることを認識しており、必要に応じて、パッケージを外部にルーティングする方法を認識しています。

2番目のエントリが存在しない場合、同じネットワーク上にある場合でも、gwに到達できません。

あなたの場合、ルートエントリの2行目はその目的を果たしますが、それは単一のホスト用であり、ネットワーク用ではありません。

172.31.1.1      0.0.0.0         255.255.255.255 UH    0      0        0 eth0

または、出力またはip routeが示すように:

172.31.1.1 dev eth0 scope link

したがって、解決策は、コンピューターとゲートウェイがおそらく同じ物理ネットワーク上にあり、サーバーにゲートウェイへのアクセス方法が指示されることです。この時点から、それらが同じ論理ネットワークを共有するかどうかは関係ありません。

また、ルーティングテーブルにコンピュータへのエントリが含まれている限り、ネットマスクが何であるかは関係ありません。ネットマスクを設定すると、ルーティングテーブルにデータを入力する方法のみが定義されますが、ルーティングテーブルに/24サブネットエントリがあり(最初の例のように)、ネットマスクを/32に設定すると、サーバーはルーティングテーブルで定義されている各コンピューターに喜んで連絡します。

これは逆方向にも機能します。/24ネットマスクはあるが「オンリンク」ルーティングエントリがない場合、ローカルネットワークにアクセスできなくなります。

2
Lacek