2024年9月25日水曜日

プロキシ(Proxy)環境下での本書の演習の実行

はじめに

職場や学校などでは、ネットワークに接続するためにプロキシ(Proxy)サーバーと呼ばれるものを介する場合が多いと思います。そのような環境下では、本書でネットワーク接続を必要とする演習をそのままでは実行できません。

下記の設定を行えば、全ての演習を実行できるようになりますが、上級者向けの内容ですので、職場や学校のネットワーク管理者など、ネットワークに詳しい方と一緒に作業することをお勧めします。

aptコマンド

ソフトウェアのインストールの際などに実行するaptコマンドを用いるための方法です。この設定を行うことで、OSの更新も可能になります。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタmousepadで設定ファイル/etc/apt/apt.confを作成します。
$ sudo mousepad /etc/apt/apt.conf
このファイルに下記の内容を記述します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
Acquire::http::proxy "http://プロキシサーバー名:ポート番号/";
Acquire::https::proxy "https://プロキシサーバー名:ポート番号/";
Acquire::ftp::proxy "ftp://プロキシサーバー名:ポート番号/";
Acquire::socks::proxy "socks://プロキシサーバー名:ポート番号/";
記述が終わったら、ファイルを保存してからmousepadを閉じてかまいません。

以上で、「sudo apt -y install (パッケージ名)」、「sudo apt update」などのコマンドが実行できるようになります。

ブラウザやwgetコマンドどなど

次に、ブラウザや、ファイルのダウンロードなどで用いるwgetコマンドを利用するための方法です。
(wget コマンドは、本書の旧バージョンでは用いましたが、最新バージョンでは用いません)

ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタmousepadで設定ファイル/etc/environmentを編集用に開きます。
$ sudo mousepad /etc/environment
多くの場合 /etc/environment は何も書かれていない空のファイルですので、そのまま以下の3行を記入してください。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。もし何かが書かれていた場合も、その内容を壊さないように注意しながら、ファイルの末尾に以下の内容を記します。
http_proxy=http://プロキシサーバー名:ポート番号/
https_proxy=http://プロキシサーバー名:ポート番号/
ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述したらファイルを保存してテキストエディタを閉じます。この設定を読み込むためにRaspberry Piを再起動してください。再起動後、ブラウザでインターネット上のウェブサイトを閲覧できるようになっているはずです。

時刻合わせ

プロキシ環境下ではRaspberry Piの時刻合わせが機能しない場合が多いと思います。そのような場合、もし職場や学校内に時刻合わせサーバーが存在すれば、下記の方法で時刻を合わせることができます。

ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタmousepadで設定ファイル/etc/systemd/timesyncd.confを開きます。
$ sudo mousepad /etc/systemd/timesyncd.conf
ファイル内で下記のような箇所を見つけます。
(略)
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3
.debian.pool.ntp.org
このうち、NTPに関する行の先頭の「#」を削除し、「=」の右辺にお使いの時刻合わせサーバーを記述します。 時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
記述後、Raspberry Piを再起動すれば時刻が合うようになります。

プロキシ環境下で時刻合わせサーバーが提供されていない場合、Raspberry Piの時計を自動で合わせることができません。
その場合、下記のコマンドで手動で時計を合わせるのが良いでしょう。
例えば、2024年8月6日23:07に合わせたい場合、下記のコマンドで実現できます。
sudo date 080623072024

下記の省略形も可
sudo date 0806230724
sudo date 08062307


プロキシ(Proxy)環境下での本書9章と10章の実行

さて、以上で本書の内容をプロキシ環境下で学べるようになりましたが、9章と10章を学ぶ際にはもう一点、注意すべきことがあります。

これらの章では、PCやスマートフォンのブラウザを通して、同一ネットワーク内のRaspberry Piにアクセスし、回路を制御します。この際の模式図が下図です。このPCやスマートフォンでは、通常のインターネットへのアクセスの際にプロキシサーバを経由しなければなりませんが、同一ネットワーク内のRaspberry Piへアクセスする場合は、プロキシサーバーを経由せず直接アクセスせねばなりません。
そのために、Raspberry PiのIPアドレス(ここでは192.168.1.3とします)を「プロキシの例外サイト」としてあらかじめ登録しておく必要があります。


Windowsの場合の例外サイトの設定法を示したのが下図です。「設定」から「ネットワークとインターネット」→「プロキシ」と辿り、「手動プロキシ セットアップ」の「編集」ボタンをクリックするとプロキシサーバーおよび例外サイトを設定できます。図ではセミコロン(;)で区切ったうしろに、192.168.1.3が例外サイトとして登録されていることがわかるでしょう。
この「例外サイト」の設定はmacOSにも存在します。「システム環境設定」→「ネットワーク」
→「詳細」→「プロキシ」です。

しかし、iOS(iPhoneやiPad)の場合、この例外サイトの設定は存在しないため、iOSでプロキシの設定自体を無効にする(すなわち、上の図でインターネットへのアクセスができない状態にする)しかありません(pacファイルと呼ばれるものをサーバーに設置してこの問題を回避する方法もありますが、ここでは割愛します)。

androidの場合、Wifiの設定に例外サイトの設定があるのですが、この設定が存在しない場合(あるいは機能しない場合)は、やはりプロキシの設定を無効にしてRaspberry Piにアクセスせざるを得ないことがあります。

5 件のコメント:

  1. ラズパイ5で、iPhoneからキャタピラをカメラ付きで動かすところまでできました。数年まえから近くの中学の科学部の支援員をしていますので、中学生に見せたいのですが、中学ではWiFi環境がありません(使用を許可されていません)。このような環境でiPhoneからの接続、運転をするのに可能な方法を教えていただけませんか。なるべくやさしい方法がありがたいです。

    返信削除
    返信
    1. Wifi環境がない状況でキャタピラ式模型を操作するには、
      iPhoneのテザリング機能を有効にして
      iPhoneをWifiルーターの代わりにする必要があります。

      具体的には、下記のAppleの公式ページにあるように、
      インターネット共有(テザリング)を有効にします。

      https://support.apple.com/ja-jp/111785

      その画面で、Wifiのパスワードを
      自分の好みのパスワードに変更できるはずです。

      また、Wifi名(SSID名)は下記のサイトを参考に変更できるはずです。

      https://www.softbank.jp/support/faq/view/11973

      以上の設定で、iPhone が Wifiルーターの代わりとなります。
      (「ほかの人の接続を許可」をオフに戻すと、その機能は停止します)

      その状態で、Raspberry Pi を、iPhone による Wifiルーターに接続します。
      それにより、Raspberry Pi は iPhone に Wifi 接続され、
      docomo/Softbank/au などのモバイルネットワーク経由で
      インターネットに接続できるようになります。

      そして、iPhone による Wifiルーターへの接続が成功すれば、
      iPhone からキャタピラ式模型を操作できるようになるはずです。
      それ以外には、iPhone による Wifiルーターに接続した PC などからも
      操作可能です。

      問題は、Raspberry Pi へ接続するためのアドレスがどうなるかです。
      私は、Wifiルーター化できる iPhone を持っていませんので、
      ここから先の内容は私の推測になります。

      これまで通り「raspberrypi.local」などのアドレスが使えれば一番楽です。
      すなわち、

      http://raspberrypi.local:8000/10-1

      というアドレスで操作可能になる、ということですね。

      ただ、 Wifiルーター化した iPhone で上記のアドレスが利用可能かどう、
      ちょっと自信がありません。

      このアドレスが使えないとすると、IPアドレスでアクセスすることになります。

      iPhoneのテザリングの仕様について
      https://qiita.com/nikujiro/items/a19cbbcdeb725e6832bc

      上記のページによると、iPhone による Wifiルーターに接続した
      Raspberry Pi には、
      172.20.10.2 から 172.20.10.17
      のどれかのアドレスが割られるはずです。
      (恐らく、先頭の 172.20.10.2 が割り当てられる可能性が高いでしょう)
      書籍で解説したように、LCD をキャタピラ式模型に取り付けて
      IP アドレスを表示するのが確実です。

      その場合、

      http://172.20.10.2:8000/10-1

      などのアドレスでアクセスすることになるでしょう。

      以上の解説でいかがでしょうか。
      (ちなみに、iPhoneではなく WiMAX などのモバイルWifiルーターでも
      原理的には可能です)

      削除
    2. 詳しいご返答ありがとうございます。試してみたいと思います。モバイルルーターを使うやり方も考えてみます。

      削除
    3. TP-link のトラベルルータを使うことで、できました。確実にするために、ラズパイ5のWiFi接続先を固定することはできますでしょうか。

      削除
    4. IPアドレスの固定化には、下記の2つの方法がありますが、
      どちらもそれなりにネットワークの知識が必要となり、
      簡単ではありません。

      [方法1]ルーター側(TP-link側)の設定を変更する方法
      [方法2]Raspberry Pi 側の設定を変更する方法

      まず[方法1]です。この方法はどうしてもルーターの種類による
      違いが大きくなりますので、こちらで説明するのが
      なかなか難しい方法です。

      やるべきことの大筋を言葉で記すと、
      「特定の端末(Raspberry Pi)から接続要求があったら、
      毎回同じIPアドレスを割り当てるようルーターの設定を変える」
      となります。

      そのために必要な情報は
      ・Raspberry Pi の MACアドレス(個体ごとに異なる)
      ・割り当てたい固定のIPアドレス
      の2つです。

      Raspberry Pi の MACアドレスの調べ方はネットで検索すると出てきます。
      割り当てたい固定のIPアドレスは、一度割り当てられたことのある
      IPアドレスを指定すればよいでしょう。

      以上がわかれば、TP-link の設定方法に従うことで、
      [方法1]の設定ができるはずです。

      例えば、下記のページで解説されていますが、
      これらは、トラベルルーターではなく固定のルーターでの解説に見えます。
      (なお、TP-link ではこの方法を「アドレス予約」と呼ぶようです)

      TP-Linkの無線ルーターで、特定の端末(パソコンやスマホ)に
      常に同じIPアドレスを割り当てる方法(DHCPアドレス予約)
      https://kuritaroh.com/2022/06/14/tp_ipaddress_fix_by_dhcp/

      Archer C55/C50/C20 や11nルーターでのアドレス予約の設定方法
      https://www.tp-link.com/jp/support/faq/1381/

      トラベルルーターで上記の設定ができるかはやってみなければわかりませんが、
      トラベルルーターTL-WR902ACの仕様に「アドレス予約」という語句がありますので、
      多分できるのではないでしょうか。
      https://www.tp-link.com/jp/home-networking/wifi-router/tl-wr902ac/#specifications

      なお、私はTP-linkを持っていませんので、
      この方法についての解説はここまでとさせてください。


      次に、[方法2]Raspberry Pi 側の設定を変更する方法
      について記します。

      この方法には[方法2(古い方法)]と[方法2(新しい方法)]があり、
      ネットで検索すると、[方法2(古い方法)]が見つかることが多いと思います。
      (dhclient.conf とか dhcpd.conf を変更する方法です)

      [方法2(新しい方法)]について記したページは、下記のページです。

      ラズベリーパイのIPアドレス固定をGUIから設定する
      https://qiita.com/mochi_2225/items/15c1e7c1c1ae79f97501

      こちらの[方法2(新しい方法)]では、下記の3つの情報が必要です。
      ・固定したいIPアドレス
      ・ルーター(TP-link)のサブネットマスク
      ・デフォルトゲートウェイ(一般的にはルータ(TP-link)自身のIPアドレス)

      2つ目と3つ目の情報の調べ方は上記ページに書いてあるので
      良いと思うのですが、問題は1つ目の固定したいIPアドレスです。

      [方法1]の場合は「一度割り当てられたことのあるIPアドレス」を
      指定すればよいのですが、
      [方法2(新しい方法)]では
      「一度割り当てられたことのあるIPアドレス」を指定してはいけません。

      なぜなら、[方法2(新しい方法)]では、Rasberry Pi 側が
      「私はこのIPアドレスを使う」と勝手に宣言するだけなので、
      ルーター(TP-link)側がそのIPアドレスを別のPCなどに割り当てようとすると
      IPアドレスが衝突し、ネットワークが正常に機能しなくなるためです。

      ですので、[方法2(新しい方法)]では
      「ルーター(TP-link)が使わないIPアドレス」を指定する必要があるのです。

      ちなみに、この問題については下記ページで解説されています。

      ラズベリーパイのIPアドレス固定は、ラズパイ側で設定 "しない" のが推奨らしい
      https://qiita.com/mochi_2225/items/3abcc45db6378e7dbb17

      では、「ルーター(TP-link)が使わないIPアドレス」とは何か、
      という問題になるのですが、これを解説するのは、
      ネットワークの知識が必要になり、やや難しいです。

      私が本書の旧版で書いた下記のページでは、この
      「ルーターが使わないIPアドレス」の調べ方が書いてあります。
      ただし、このページは[方法2(古い方法)]について記したページであり、
      IPアドレスの固定方法の解説としては現在は役に立ちませんのでご注意ください。

      Raspberry PiのIPアドレスを固定する (古い方法)
      https://raspibb1.blogspot.com/2019/01/raspberry-piip.html

      このページでは、ルーターの設定を調べることで、
      「ルーターが使わないIPアドレス」を知る方法を解説しています。
      ただし、ルーターの例としては NEC と Buffalo の2つを解説しており、
      TP-link の解説にはなっておりませんので、ご注意ください。

      以上となります。

      [方法1]と[方法2]のどちらの方法をとるにせよ、
      これ以上の内容は、本書の内容を大きく超えますので、
      この問題についての解説はここまでとさせていただけますでしょうか。

      よろしくお願いします。

      削除