プライベートアドレス空間にCentOS 7マシンがあります。IPは10.10.0.2です。パブリックIPを持つゲートウェイ経由でインターネットにアクセスしたい同じスイッチに接続されている、これを50.50.50.50と呼びましょう。ある時点で機能していましたが、現在は壊れており、修正できないようです。また、net-toolsをインストールしました。これは、そのフォーマットに頭を悩ます方がはるかに簡単だからです。
[root@node002 ~]# ip route show
10.0.0.0/8 dev ens785 proto kernel scope link src 10.10.0.2 metric 100
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50をゲートウェイとして、他のすべてのルートを追加するにはどうすればよいですか?
[root@node002 ~]# ip route add 0.0.0.0/0 dev ens785
などのいくつかのことを試しましたが、ルーティングテーブルに何も追加されません。エラーメッセージもありません。このip route add 50.50.50.50 dev ens785
のようにホストにルートを追加してみましたが、ルーティングテーブルに1行追加されました。
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50 0.0.0.0 255.255.255.255 UH 0 0 0 ens785
私は[root@node002 ~]# ip route add 0.0.0.0/0 via 50.50.50.50
などの他のバリエーションも試しましたが、これにより、ホストへのルートが削除されました。
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
私も試しました:
[root@node002 ~]# ip route add default via 50.50.50.50/0
Error: ??? address is expected rather than "50.50.50.50/0".
そしてさらに:
[root@node002 ~]# ip route add default dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50 0.0.0.0 255.255.255.255 UH 0 0 0 ens785
他のすべてのマシンには、宛先およびゲートウェイとして0.0.0.0を持つデフォルトルートがあります。例えば私のデスクトップのように、それは理にかなっています-同じネットワーク上のトラフィックはゲートウェイなしでローカルネットワークに行き、他のものへのトラフィックはルーターを経由します。
root@desktop ~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 100.100.100.1 0.0.0.0 UG 100 0 0 eth0
100.100.100.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
私がこれをどのように壊したのか、どのように修正したのか、私にはよくわかりません。どんなポインタでも大歓迎です!
[〜#〜]編集[〜#〜]
まず、同じマシン上でゲートウェイマシンにプライベートアドレスを与えました。これは10.1.1.1になりました。これは、サブネットマスクが255.0.0.0であることを意味しますthinkは、同じネットワークであることを意味します。アドレスはping可能です。しかし、それをデフォルトとして追加することもできません。
[root@node002 ~]# ip route add default via 10.1.1.1
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50 0.0.0.0 255.255.255.255 UH 0 0 0 ens785
ノードにパブリックIPを一時的に追加してから、デフォルトゲートウェイを追加できます。
[root@node002 ~]# ip a add 50.50.50.51 dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50 0.0.0.0 255.255.255.255 UH 0 0 0 ens785
[root@node002 ~]# ip route add default via 10.1.1.1
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.1.1 0.0.0.0 UG 100 0 0 ens785
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50 0.0.0.0 255.255.255.255 UH 0 0 0 ens785
50.50.50.51 0.0.0.0 255.255.255.255 UH 100 0 0 ens785
次に、パブリックIPアドレスを削除しますが、デフォルトのルートはそのままにします。
[root@node002 ~]# ip a del 50.50.50.51/32 dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.1.1 0.0.0.0 UG 100 0 0 ens785
10.0.0.0 0.0.0.0 255.0.0.0 U 100 0 0 ens785
50.50.50.50 0.0.0.0 255.255.255.255 UH 0 0 0 ens785
それで、パブリックIPを削除してゲートウェイを保持できる場合、ゲートウェイを追加できるようにパブリックIPを追加する必要があるのはなぜですか?
編集2パブリックIPを簡単に追加しないと、ipコマンドを使用して追加するデフォルトルートを取得できません。
さらに混乱を招きますが、NetworkManagerをバイパスしてifcfgファイルを使用する(そしてDHCPではなく静的割り当てにスワップする)ことで、実現できます。
[root@node002 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens785
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NM_CONTROLLED=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens785
DEVICE=ens785
ONBOOT=yes
MTU=9000
HWADDR=00:11:22:33:44:55
IPADDR=10.10.0.2
NETMASK=255.0.0.0
GATEWAY=10.1.1.1
DNS1=10.1.1.1
[root@node002 ~]# systemctl stop NetworkManager
[root@node002 ~]# ifdown ens785 && ifup ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 ens785
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens785
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 ens785
まず、IPを介してデフォルトゲートウェイを追加することはできません。また、ゲートウェイの同じ範囲からのIPを持つインターフェイスがありません。たとえば、50.50.50.50/24
などのデフォルトゲートウェイを追加するには、50.50.50.100/24
などの同じ範囲のIPが必要です。
インターフェイスが1つしかなく、プライベートIPアドレスがあり、インターネットにアクセスする必要がある場合は、ルーターが必要です。これにより、ルーターは、ローカルIPからパブリックIPにNAT=を作成できます。
スイッチしかないので、この問題を修正するには、パブリックIP範囲のIPを持つプライベートIPがある同じインターフェースにサブ(エイリアス)インターフェースを追加するというトリックを実行できます。たとえば、50.50.50.100/24
を追加します。このようなデフォルトゲートウェイip route add default via 50.50.50.50
ルーティングは常にレイヤー3(IP)で行われます。デフォルトルートが50.50.50.50
を指すだけでは不十分です。ルーティングテーブルには、到達方法を示すエントリも含まれている必要がありますthatホスト。 IP層には、同じリンク上にあっても、ランダムなアドレスには到達できません。 IP層はそれを知りません。 IPレイヤーがルーティングテーブルからIPパケットの送信先を決定した場合のみ、レイヤー2に引き渡す準備が整います。
ホストが同じ範囲のIPを持つことは厳密に必要ではないことに注意してください(50.50.50.51
など)。重要なことは、サブネットへのルートがあることです。ただし、セカンダリアドレス(ip addr add 50.50.50.51/24 dev ens785
)を追加すると、50.50.50.0/24
へのルートが自動的に追加されます。
そうは言っても、これを行う正しい方法は、あなたがやろうとしたことだと思います。セカンダリアドレスを10.0.0.0/8
範囲のルーターに追加し、そのアドレスにデフォルトルートを追加します(10.1.1.1
例)。ルートの追加がうまくいかなかった理由がわかりません。 ip route add default via 10.1.1.1
からエラーメッセージが表示されましたか?
10.0.0.0/8
ネットワーク上のホストからインターネットにアクセスする場合、ルーターは上記の@WissamRoujoulahのようにプライベートアドレスとパブリックアドレスの間でNAT=)を実行する必要があります。
これは自動ネットワーク構成マネージャーのバグだと思います。次のように入力して設定マネージャをオフにした場合:
NM_CONTROL=no
あなたのifcfg-ens785
とネットワークを再起動すると、手動でデフォルトルートを追加できるようになります。