![見出し画像](https://assets.st-note.com/production/uploads/images/30593538/rectangle_large_type_2_c0ba1e46fc10309c9f222c65f93fbdcc.png?width=1200)
自宅のネットワーク環境を改善した話
こんにちは!
今回はネットワークブリッジを利用して、自宅のネットワーク環境を改善したことについて書いていきます。これまで以上にマニアックというかニッチ的な課題解決ではありますが、たまにはこんなのもいいかなと言うことで記事にしたいと思います。
ネットワーク改善の経緯
今回のネットワーク改善をしようと思った理由は、メインPCとサーバーPCの間のファイル通信速度への不満です。この二台の接続は今まで無線で行っていたわけですが、その通信に色々と不都合があったので、有線での通信にできるようにネットワークを改善しました。
これまでの記事で書いてきたように、現時点で僕はLinux mintが入ったメインのPCと、xubuntuが入ったサーバー用PCを併用しており、サーバー用PCからのファイル共有でデータの管理をしています。これまでのネットワークの構成はこんな感じ。
以前、ファイル共有について書いた記事の図に、新たに導入したサーバー用PCを追加した形ですね。基本的にはWIMAXを無線ルーターとして利用し、デバイス間の通信は無線で行っていますが、サーバーについてはUSBの有線で接続しています。WIMAXにはUSBでインターネット接続が出来る仕様になっていて、ケーブルさえあれば一台だけなら有線での接続が可能です。有線だと速度が速くてよいというのもありますが、サーバー用PCは常時起動なので、WIMAXの充電としてもちょうどいいという側面も大きいです。
当初はこのネットワーク構成で問題ないかなぁとは思っていたのですが、実際に運用してみるとちょっと問題がありました。というのは、大きいファイルをメインのノートPCからサーバー用PCに送る際(またはその逆)、なかなかうまくデータを転送できないというケースが相次いだのです。無線なのである程度速度が落ちることは織り込み済みだったのですが、それだけでは説明出来ないくらいの速度(数kB/sとか)になってしまうことも多々あったので、その状況を打開するために、ネットワーク構成に少し手を加えようと思ったわけです。
ちょっと調べてみたところ、僕が現状使っているWIMAXデバイス「NEC WX05」には発熱面での問題があるらしく、それが悪さしているのではないかと疑っています。これは僕の勝手な想像ですが、一度に大量のデータを転送しようとすると熱暴走するとかがあるのかも知れません。ネットで調べた情報を元にWIMAX側の設定も多少いじったりもしてますが、そもそも論としてやはり有線のほうが安定するし、速度も早いので、なんとかメインPCとサーバー用PCを有線接続しようと思ったわけです。
ネットワーク改善の方向性
メインPCとサーバー用PCを有線接続するにあたってネックになるのがWIMAXの仕様です。先程紹介したとおり、WIMAXデバイスには充電・有線LAN接続用のUSB-Cポートがついており、USB経由でPCと接続することができるわけですが、問題はこの方法で接続できるデバイスは1台だけだということです。それはソフトウェア的にそういう制約があるわけではなく、単純にUSB-Cポートが一つしかないからそうなってしまうわけですが、いずれにしても普通に使うだけだとPC一台しか有線LAN接続は出来ません。
おそらく、この状況を課題を解決するもっとも単純な方法は、WIMAXの「クレイドル」というデバイスを使うことです。この「クレイドル」はスマホの充電スタンドのような形状をしていますが、その最大の特徴は一般的なLANケーブルによるネットワーク接続ができるようになることです。WIMAXをLANケーブルで接続できるようになれば、一般的なスイッチングハブを経由させることで複数のデバイスと有線接続できるようになるので、今回の問題は解決可能なはずです(下のリンクの画像を見ていただければクレイドル形状のイメージはつきやすいと思います)。
クレイドルを使った場合のネットワーク構成を図にするとこんな感じ。
試してないので保証は出来ませんが、おそらくこれなら問題なく今回の課題を解決できると思います。これでめでたしめでたしとしても良いのですが、この構成には大きな欠点(というかデメリット)が有ります。それは、クレイドルが3300円とやたらと価格が高く、さらにスイッチングハブも買わなければならないので、なんだかんで出費はそれなりの金額になってしまうことです。この方法でうまくいくであろうことは前々からわかっていたのですが、できればムダな出費をさけたいなぁというわけで、色々と調べたり試行錯誤してみたりしました。
結論としては、冒頭にも書いた「ネットワークブリッジ」という機能を使うことで、LANケーブル一本(300円くらい)のみの出費で今回の要求を満たすことができました。ここから先は、そのネットワークブリッジについて書いていきます。
ネットワークブリッジ
僕自身もこの機能について完璧に理解しているわけではないですが、その機能を端的に言うと「複数のネットワークをまとめて単一のネットワークとして結合する」というもののようです。複数のネットワークの間に橋(Bridge)を架けるイメージなのだと思います。参考までにwikipediaの記事を貼っておきます。
今回はLinuxマシンの機能としてネットワークブリッジを使うので、イメージ的にはPCを一つのネットワークハブのように使うと考えるとわかりやすいと思います。具体的なネットワークの構成はこんな感じ。
要するに、サーバー用PCがWIMAXとの通信の相手として振る舞いつつ、同時にノートPCにLANを分配するハブとしても振る舞うので、ノートPC側も有線で接続できるというわけです。この構成だとサーバー用PCが起動していないときにノートPCがインターネットに繋げないと言うデメリットがありますが、何度も紹介しているようにサーバー用PCは常時起動なので問題ありません。
もちろん、WIMAXをUSBで直接ノートPCと接続することもできるので、何かトラブルがあってサーバー用PCが落ちているときにも多少構成をいじってあげればすぐに対応可能です。
というわけで、このようにネットワーク構成を改善することによって、メインPCとサーバー用PCの接続が有線になったため、ファイル転送のスピートも高速かつ安定的になりました。どちらもハードが古いので最新のLANケーブルの規格の速度には到底適いませんが、それでもストレスなく通信できるレベルなので問題ありません。そもそも、動画や高画質の写真などのやたらと重いデータをやり取りする機会はそこまで多くないですからね。最大でもせいぜい数GB程度ですね。
設定諸々
ここからは具体的な設定の手順についてです。いつものように、備忘録的に残しておく感じですね。ちなみに、今回設定が必要なのはサーバー側のみで、ブリッジの受け手となるノートPCには特に設定は必要ありません。また、設定自体はLANケーブルで両PCを接続した状態で行います。
今回利用するのは、Linux向けのブリッジ構築用のパッケージ「bridge-utils」。
$ sudo apt-get install bridge-utils
ここからはサクサク設定項目を入力していきます。「ip a」コマンドで各種ネットワークカードの情報が入手できるので、まずはそれを確認。今回の場合は「enp3s0」がノートPCとの接続に使っているLANポート、「enx6ce4dad2efed」がWIMAXと接続しているUSBポートでした。
$ sudo brctl addbr h_bridge # ネットワークブリッジの作成
$ sudo brctl addif h_bridge enp3s0 # ノートPCとの有線ポート(LAN)をブリッジに追加
$ sudo brctl addif h_bridge enx6ce4dad2efed # ルーターとの有線ポート(USB)をブリッジに追加
ブリッジの作成自体はこれでOK。ここで、念の為ブリッジがきちんと出来ているかを確認します。
$ sudo brctl show # 作成したブリッジの状況を確認
bridge name bridge id STP enabled interfaces
h_bridge 8000.00248c5d8794 no enp3s0
enx6ce4dad2efed
interfacesの欄に、先程追加した2つのポートが追加されていれば、ブリッジはきちんと出来ています。
$ sudo ifconfig h_bridge 192.168.179.7 # ブリッジのipアドレス設定
$ sudo ifconfig enx6ce4dad2efed 0.0.0.0 # サーバー側ポートのipアドレスの初期化
$ sudo ifconfig enp3s0 0.0.0.0 # ノートPC側ポートのipアドレスの初期化
ここまで設定したところ、ノートPC側は無事にインターネットにつながることが確認できました。WIMAXからサーバーPCのブリッジを経由してしっかりネットワークに組み入れられているようです。一方で、今度はサーバー側PCがインターネットに繋がらないという問題が発生。Firefoxからgoogle検索をしてみようとしてもエラーが出てしまいます。
ノートPC側が問題なくネットに繋がっていることや、
$ ping 192.168.179.1 # 192.168.179.1はWIMAXのipアドレス
は通っていることから、このマシンがネットワークに入っていることは間違いありません。となると、おそらく問題はインターネットゲートウェイ(LANとインターネットの接合箇所。今回はWIMAX)の設定だろうということで、下記を入力。
$ sudo route add default gw 192.168.179.1
しかし、これでもダメ。インターネットに出られているかどうかを確認するために、下記を確認。
$ ping 8.8.8.8 # 8.8.8.8はGoogleが提供するDNSサーバーのipアドレス
これは問題なく通りました。なので、インターネット自体には接続できているわけですね。それでもブラウザからのインターネット閲覧ができないということは、…
$ ping google.com
これは予想通り通りません。具体的には「名前解決に一時的に失敗しました」というエラーが出るので、要するに名前解決が出来ていない(DNSサーバーの設定が出来ていない)というのが問題だったようです。
ちなみに、名前解決というのは、URLの文字列とipアドレスの紐付けを行うことです。インターネットブラウザはURLの文字列をもとに、DNSサーバーという名前解決をするサーバーからipアドレスを入手し、このipアドレスを使って見たいサイトにアクセスするという仕組みで動いています。今回の問題点は、その名前解決をするDNSの設定ができていなかったために起こっていたようです。
ということで、問題箇所が特定できたので、DNSサーバーの設定を進めます。調べてみたところ、Linuxでは/etc/systemd/resolved.confというファイルにDNSサーバーの設定ファイルがあるようなので、ここを修正します。
$ sudo cp /etc/systemd/resolved.conf /etc/systemd/resolved.confbk # 念の為バックアップ
$ sudo vim /etc/systemd/resolved.conf # resolved.confの修正
[Resolve]
DNS=8.8.8.8 192.168.179.1 # DNSサーバーとして8.8.8.8(GoogleのDNSサーバー)と192.168.179.1(WIMAX)を設定
$ systemctl restart systemd-resolved # 名前解決の設定を有効化(リスタート)
これでようやくFIrefoxからのインターネットアクセスができるようになりました。正直言って、これをやるまでは名前解決やDNSサーバーのあたりは全然わかっていなかったので、今回の通してだいぶ勉強になったなぁとは思いますw
シェルスクリプト化
ここまでの設定でブリッジ接続ができたわけですが、この設定はPCの電源を消すと消去されてしまいます(DNSサーバーの設定は保存されます)。そのため、ここまでの一連の設定をスクリプト化して、起動時に自動的に設定されるようにしておきます。いくら常時起動とはいえ、サーバーをいじったりするときなんかは頻繁に再起動したりするので、その都度設定しなければならないのは面倒です。
#!/bin/bash
BRIDGE=h_bridge # ブリッジ名
ETH0=enx6ce4dad2efed # ルータとのインターフェイス
ETH1=enp3s0 # クライアントとのインターフェイス
GATEWAY=192.168.179.1 # ゲートウェイのip
IP_ADDRESS=192.168.179.7 # サーバー側ip
sleep 30;sudo brctl addbr $BRIDGE # bridge追加
sudo brctl addif $BRIDGE $ETH0 #ブリッジにeth0を追加
sudo brctl addif $BRIDGE $ETH1 #ブリッジにeth1を追加
sudo ifconfig $ETH0 0.0.0.0
sudo ifconfig $ETH1 0.0.0.0
sudo ifconfig $BRIDGE $IP_ADDRESS
sudo route add default gw $GATEWAY
ちなみに、一番初めてに「sleep 30」を入れているのは、起動直後にこの処理をすると(おそらく)起動順位の問題で上手くいったりいかなかったりするせいです。将来的にはきっちり起動順位を設定してもうちょっとスマートにやりたいところですが、とりあえずはこれで問題なく動いているので良いかなと。
いずれにしても、これで起動時に自動でブリッジ設定をしてくれるようになったので、今後はこのあたりはあまり深く考える必要がなくなりました。こういう感じで、学んだことを仕組み化までのサイクルが上手く回ってくると楽しいですね。僕としては、3300円のクレイドルを購入せずに済んで非常に満足ですw
まとめ
今回は、ネットワークブリッジ機能を使った自宅ネットワークの改善を行いました。ネットワークブリッジ自体は現代ではあまり頻繁に使われる機能ではないと思いますが、今回のような制限された状況ではなかなか役に立つものですね。
これはLinux関係のこと全般に言えることですが、やっていくなかで自分の理解がどんどん進んでいくのが楽しいです。今回は特に、その試行錯誤の過程をなるべく詳細に書くようにしました。記事を読んでいるだけだとさくっとやっているように見えるかもしれませんが、その実結構詰まっていることも多いので、そのあたりの感覚も合わせて感じていただければなと。
それでは、また!
この記事が気に入ったらサポートをしてみませんか?