CentOS 7: 2つのネットワークに繋ぐ

web サーバにしている PC を2つのネットワークに繋ぐようにしたら問題が発生した。よく理解できてないけど、なんとか解決したので書く。

状況整理

まずは、2つ目のネットワークに繋ぐ前の状況を整理しておく。

ウチには2つのインターネット回線があって、それぞれに web サーバを公開している。1つは光回線で1つ目の web サーバのほか、いくつかある PC は全てこのネットワークに繋がっている。もう1つは去年の12月に導入した WiMAX で、2つ目の web サーバだけが有線で繋がっている(クレードルを介している)。2つのネットワークはウチの中では独立していて繋がっていない。

なので、2つ目の web サーバ――面倒だからホスト名で呼ぼう、bigswifty だ――を操作したい時には直接操作するか、インターネット経由で ssh 接続する必要があった。まぁ、これで用は足りてたんだけど、インターネット経由だとホスト名が長いのが微妙だった。

ついでに先に書いておこう、bigswifty の OS は CentOS 7.6 だ。

今日突然思いついた

ほぼ1年間、上記の状態で使ってたんだけど、今日突然思いついた。bigswifty は有線で WiMAXに繋がってるけど、WiFi もあるじゃないか。WiFi で光回線側のネットワークに繋げば、いつもメインで使ってる apostrophe からインターネットを経由しないで ssh できるようになるはずだ。

というわけで、さっそく bigswifty に直接ログインして、WiFi を有効にし、光回線側のネットワークに繋いだ。これで apostrophe から bigswifty に、インターネットを経由しなくても繋がるようになった。やったぜ!

問題発覚

ところがしばらくして問題が発覚した。bigswifty が web サーバとして機能してないのだ。具体的に言うと、インターネット経由で bigswifty からファイルをダウンロードしようとしても Nginx のエラーページが表示されて、ダウンロードできない。

試しに WiFi を無効にしてみると、ちゃんとファイルをダンロードできるようになった。

よくわからないけど解決編

いろいろググった結果、↓このページを見つけた。

 cf. 複数NICでのデフォルトゲートウェイ設定方法 – maruko2 note

ルータの DHCP 機能にまかせていたルーティングを手動で設定してやればいいようだ。これをスタティックルートというらしい。

じゃ、手順を始めよう。まずはデフォルトゲートウェイを設定する。/etc/sysconfig/network ファイルにつぎのように記述する。

GATEWAY=192.168.100.1

デフォルトゲートウェイは WiMAX 端末だ。つぎに、光回線側のネットワークと通信するための設定を書く。WiFi のインターフェイス名は wlo1 なので、/etc/sysconfig/networs-scripts ディレクトリの下に route-wlo1 というファイルを作って、つぎのようにする。

192.168.1.0/24 via 192.168.1.1

192.168.1.0/24(光回線のネットワークのこと)にアクセスするには 192.168.1.1(光回線側のルータ)を経由しろ、っていうことだと思う。

そして network を再起動。

[takatoh@bigswifty ~]$ sudo systemctl restart network

これで作業は終わり。

はたして、無事、光回線側からも ssh で繋がるし、インターネットからもファイルをダウンロードできるようになった。

[追記:11/25]

現在11月25日午前4時過ぎ。インターネット経由でファイルをダウンロードしようとしたら、Nginx のエラーページが表示されてダウンロードできなかった。

ごめん、上に書いた方法じゃダメだったみたいだ。いったんはちゃんと繋がった(ホントだよ!)から解決できたものだと思ったんだけど……

ローカルネットワーク(光回線側)から ssh で繋ぐことはできる。ping を試してみるとつぎの通り、応答が返ってくる。

takatoh@apostrophe $ ping bigswifty
PING bigswifty (192.168.1.13) 56(84) bytes of data.
64 bytes from bigswifty (192.168.1.13): icmp_seq=1 ttl=64 time=27.2 ms
64 bytes from bigswifty (192.168.1.13): icmp_seq=2 ttl=64 time=3.87 ms
64 bytes from bigswifty (192.168.1.13): icmp_seq=3 ttl=64 time=3.96 ms
64 bytes from bigswifty (192.168.1.13): icmp_seq=4 ttl=64 time=5.47 ms
64 bytes from bigswifty (192.168.1.13): icmp_seq=5 ttl=64 time=5.03 ms
64 bytes from bigswifty (192.168.1.13): icmp_seq=6 ttl=64 time=9.35 ms
^C
--- bigswifty ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5007ms
rtt min/avg/max/mdev = 3.875/9.153/27.218/8.282 ms

だけど、インターネット経由だと応答が返ってこない。

takatoh@apostrophe $ ping lathercraft-storage3.mydns.jp
PING lathercraft-storage3.mydns.jp (49.135.111.90) 56(84) bytes of data.
^C
--- lathercraft-storage3.mydns.jp ping statistics ---
37 packets transmitted, 0 received, 100% packet loss, time 35999ms

lathercraft-storage3.mydns.jp っていうのは、bigswifty をインターネットに公開した時のホスト名だ。DDNS の mydns を使ってる。

ここでちょっと思いついて、lathercraft-storage3.mydns.jp が現在どんなアドレスを使ってるのか確かめてみた。このサイトで確認できる。すると、49.135.102.186 だった。これは lathercraft-storage3.mydns.jp に ping を打った時に応答したアドレスと違う。

てことは、問題は DNS だ。mydns には cron にスクリプトを登録して定期的にアドレスの通知をしてるんだけど、手動でやってみた結果がこれ:

<head>
<title>Free Dynamic DNS (DDNS) for Home Server and VPS etc  | MyDNS.JP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<LINK href="./site.css" rel=stylesheet type=text/css>

</head>
<BODY BGCOLOR="#FFFFFF"
      TEXT="#304040"
      leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
>
Login and IP address notify OK.<BR>
login_status = 1.<BR>
<BR>
<DT>MASTERID :</DT><DD>mydns882612</DD>
<DT>REMOTE ADDRESS:</DT><DD>240b:12:1461:6100:c480:657b:ef6b:892d</DD>
<DT>ACCESS DAYTIME:</DT><DD>2019/11/24 19:46:44 UTC</DD>
<DT>SERVER ADDRESS:</DT><DD>2604:180:3:ab6::245c</DD>
<BR>

</body>
</html>

REMOTE ADDRESS が通知したアドレスなんだけど、IPv6 のアドレスになっている。問題はこれかぁ。

さて、どうしよう?