マイクラで考えるルーティング

# 前段

最近仕事でルーティングについて調べることがありだいぶ苦労した。
具体的には新しいサーバにネットワークが繋がらないという問題であった。
この週末にマイクラでネザーゲートを作っているときに、これもルーティングに似てると思ったので、
個人的な考えを残すことにした。

# 本論
前提として、図のサーバを一つのネットワーク、ネザーゲートとサーバとして考える。
まず、マイクラに図のようなゲートA,B,Cがあるとする。
それぞれ通常サーバとネザーサーバの同じアルファベットのゲートが繋がっているとする。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/b91d7fb5-e018-19da-9817-ed8a0989119b.png)

このときの通常サーバ側のルーティングは下記のような感じである。

```
route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0         ←　A
10.0.3.0        192.168.0.1     255.255.255.0   U     1      0        0 eth1         ←　B
10.0.4.0        192.168.0.2     255.255.255.0   U     1      0        0 eth2         ←　C
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0

```

次に通常サーバ側にゲートA'を作成する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/aac404c9-8b4a-5af4-6b9a-36428473087e.png)

この時、本来はネザーサーバ側のA'ゲートに繋がってほしいのだが、距離が近いせいでネザーサーバ側のAゲートに繋がってしまった。
（実際のマイクラでは距離が1000以内だったかな）
実際にルーティングと似ていると感じたのはこの時。
この時の状況を図にしてみる。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/2e442ccc-3e78-f86c-4897-2b4880f02319.png)


勝手な考えだが、通常サーバとネザーサーバの間にルータのようなものが存在すると仮定する。
通常サーバ側のゲートA,A'はともに同じルータに向いているが、ルータに繋がっているのはネザーサーバ側のゲートAのみである。
そのため通常サーバのゲートA'はネザーサーバ側のゲートAに繋がってしまった。
この時通常サーバ側のゲートA’からネザーサーバ側のゲートA’にいくらpingを打とうが応答はないのである。
（実際のマイクラではネザーサーバ側にゲートA’がそもそもできていないので、少し現実のネットワークとは異なる。）

このときの通常サーバ側のルーティングは下記のような感じである。

```

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0         ←　A
10.0.3.0        192.168.0.1     255.255.255.0   U     1      0        0 eth1         ←　B
10.0.4.0        192.168.0.1     255.255.255.0   U     1      0        0 eth1         ←　C
10.0.5.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0         ←　A'
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0


```


これを解決するには、ルータ側またはサーバ側で設定を変更する必要がある。
まず、ルータ側の設定変更について。
私自身がルータを詳しく知らないので簡単になるが、ルータに通常サーバ側のゲートAからの通信はネザーサーバ側のゲートAへ、通常サーバ側のゲートA'からの通信はネザーサーバ側のゲートA’、それぞれネザーサーバ側のゲートからの通信も通常サーバ側の対応するゲートに返すようにすればよい。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/891ddc67-0a4d-120b-dfff-15941ef88011.png)

次にサーバ側の設定変更について。
今回業務で対応したのはこちらの設定だが、結論として向いているゲートウェイが誤っていたので、そこを修正したといった話。

![5'.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/c295efb3-80e8-23a2-70e4-29e937d31397.png)

このときの通常サーバ側のルーティングは下記のような感じである。

```

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0         ←　A
10.0.3.0        192.168.0.1     255.255.255.0   U     1      0        0 eth1         ←　B
10.0.4.0        192.168.0.1     255.255.255.0   U     1      0        0 eth1         ←　C
10.0.5.0        192.168.0.2     255.255.255.0   U     1      0        0 eth2         ←　A'
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0

```

# まとめ

インフラはあまり触らない上に、ネットワークはまだまだ勉強中なので間違っている、わかりにくい部分は多々あると思います。
しかし、個人的にマイクラでルーティングを身近に感じることができたのでイメージがしやすくなりました。
あと全く関係ないが絵を描くのにペイントってつらいなと思いました。