自宅サーバーやネットワークカメラをインターネット上に公開したい場合など、ヤマハルーターでポート開放する手順を紹介します。
ちなみに自分もヤマハルーターを用いて、ラズパイのWebサーバーを公開しています!
なお、ヤマハルーターであれば、どのモデルでも当記事の方法でポート開放できます。
例として、以下のような環境を想定して、Webサーバーのポート(TCP80とTCP443)を解放する場合について、解説していきます。
- ルーターのローカルIPアドレスは192.168.100.1
- サーバーのローカルIPアドレスは192.168.100.2
- サーバーのTCP80番と443番を公開する
ヤマハルーターの設定を行うには、TelnetやSSHで接続したうえで、管理者モードにログインしておく必要があります。設定の前にadministratorコマンドを実行し、管理者モードになっておきましょう。
$ administrator
ヤマハルーターには補完機能がついています。コマンドの一部だけでも、実行するコマンドが絞り込める場合は実行することができます。例えば、「ad」とだけ入力してEnterキーを押すだけで、administratorコマンドが実行されます。
管理者モードに入ると、プロンプトが$から#に変わります。
【手順1】現在の設定を確認しよう
ルーターは使用環境によって設定内容が異なります。したがって、最初にどのような設定がなされているか確認する必要があります。
まず、show config
コマンドを実行して、設定内容をすべて表示させてください。show configコマンドを実行すると、ルーターの設定内容がすべて書き出されます。
ポート開放に必要な情報は、
- インターネット接続に使用しているPPのID
- それに対応するNATディスクリプタのID
の2つです。
はじめに、PPPoE接続に使用しているPP(Point-to-point接続)のIDを確認しましょう。
# show config
ip route default gateway pp 1
…
ip route default gateway pp 1となっているので、インターネット接続に使用しているPPのIDは1であることがわかります。
次に、pp1のコンフィグを確認し、使用しているNATディスクリプタのIDを確認してください。
pp select 1
pppoe use lan2
ip pp nat descriptor 1
(中略)
nat descriptor type 1 masquerade
ip pp nat descriptor
につづけて、NATディスクリプタの番号が表示されます。ここでは、IDが1のNATディスクリプタが適用されていることがわかりました。
以上をまとめると、
- PP:1
- NATディスクリプタ:1
となります。
【手順2】静的IPマスカレードを設定する
手順1で求めた情報をもとに、サーバー(ここでは192.168.100.2)にポートTCP80とTCP443を転送するように設定していきます。
ポートの転送には、nat descriptor masquerade staticコマンドを使用します。このコマンドを使用することで、外部からのアクセスを特定のローカルサーバーに転送するようにすることができます。
次のコマンドを入力してください。
# nat descriptor masquerade static 1 1 192.168.100.2 tcp 80
# nat descriptor masquerade static 1 2 192.168.100.2 tcp 443
書式は次のとおりです。
nat descriptor masquerade static nat_descriptor id inner_ip protocol [outer_port=]inner_port
nat descriptor masquerade staticにつづけて、NATディスクリプタのIDを指定します。手順1でNATディスクリプタのIDは1であることがわかったため、ここでは1を指定します。
2番目には、NATディスクリプタごとのIDを指定します。通常は連番で指定しておけばOKです。
3番目の引数には、転送先のローカルIPアドレスを指定しておきます。ここでは公開したいサーバーが192.168.100.2であるため、それを指定しています。
4番目、5番目の引数には、プロトコルとポート番号を指定します。
ポート番号のかわりにニーモニックを指定することもできますので、次のようにコマンドしても構いません。
# nat descriptor masquerade static 1 1 192.168.100.2 tcp www
# nat descriptor masquerade static 1 2 192.168.100.2 tcp https
解説
このコマンドの意味をもう少し詳しく解説していきます。
まず、PPPoEによるインターネット接続をしている場合、ほとんどのケースでIPマスカレードを使用していることと思います。
IPマスカレードとは、内部にあるマシンのIPアドレスをルータのグローバルIPアドレスと相互変換する機能のことです。「NAPT」とも呼ばれているもので、ローカルのマシンからインターネットにアクセスがあると、ローカルとグローバルのアドレス・ポート番号が自動的に結び付けられます。
アクセスされたサーバーは、グローバルIPアドレスを有しているルーターにレスポンスを返し、レスポンスを受け取ったルーターは結び付けられているローカルマシンへそのレスポンスを転送するようになっています。これにより、1つのグローバルIPしかなくても、内部の複数のマシンからインターネットを使用することができるようになっているのです。
俗に言う「ポート開放」とは、IPマスカレードによる結びつけを固定することを意味しています。外部から特定のポートにアクセスがあった場合、必ず特定のローカルマシン(サーバー)に転送するようにしておくことで、インターネット側からローカルにあるサーバーを利用できるようにしています。これがポート開放のメカニズムです。
NATディスクリプタというのは、IPマスカレードを管理する単位のことです。ヤマハルーターでは、IPマスカレードの設定をNATディスクリプタという単位で管理します。
【手順3】フィルタを作成する
次にフィルタを作成します。
フィルタはip filterコマンドを使用して作成できます。
外部から来たパケットがローカルサーバー(192.168.100.2)に到達できるようにするため、次のコマンドを実行します。
ip filter 1200 pass * 192.168.100.2 * * 80,443
ip filterコマンドの書式は次のようになっています。
ip filter filter_num pass_reject src_addr[/mask] [dest_addr[/mask] [protocol [src_port_list [dest_port_list]]]]
書式を見るとややこしいのですが、まとめると次のような形となります。
ip filter <ID> <pass/reject> <送信元IPアドレス> <宛先IPアドレス> * * <ポート番号>
ここでは
- インターネット上のマシン(すべてのグローバルIP)からなので
→送信元IPアドレスには「*」 - サーバーマシンのIPアドレスは192.168.100.2なので
→宛先IPアドレスは「192.168.100.2」 - ポートはTCP80と443なので
→ポートは「80,443」もしくはニーモニックで「www,https」
とします。IDは任意です。(※ただし、ほかのフィルタと被っていると、上書きしてしまうので注意してください。)
ポイントは宛先のIPアドレスをサーバーのローカルIPに設定するところです。ヤマハルーターは、NATディスクリプタを通ったあとでフィルタリングします。よって、フィルタに至った時点では、すでに宛先はサーバーのローカルIPアドレスに変換されています。そのため、宛先のアドレスにはサーバーのローカルIPアドレスを指定する必要があるのです。
なぜフィルタの設定が必要なのか?
静的IPマスカレードを設定しただけでは、外部から内部にあるサーバーへアクセスすることはできません。アクセスを許可するフィルターの設定が必要となります。
ヤマハルーターでは、外部からのパケットは次のような流れで処理されています。
外部から送られたパケットは、はじめにIPマスカレードにより処理を受けます。手順2で静的IPマスカレードを設定していると、外部のパケットは設定されていたプライベートIPアドレスを持つマシンへ転送されます。
しかし、その後にフィルターによる処理を受けます。フィルターとは、いわゆるファイアウォールに該当するもので、外部からの意図しないアクセスを拒否する役目を果たします。基本的に明示されていない外部から(グローバルIPから)のアクセスはデフォルトで拒否される仕組みになっているため、サーバーを公開したい場合は、外部からサーバーへのパケットは通すように設定する必要があります。
【手順4】フィルタをPPPoEに適用する
手順3で作成したフィルタをpp1のin側に適用します。
ip pp secure filter in 1200 200000 200001 200002 ...(以下略)
作成したフィルタのID(ここでは1200にしました)をpp1のip pp secure filter inにつづけて指定します。
ポイントは最初に適用することです。
in側のフィルタは指定した順番で適用されます。通常、in側のフィルタの最後には、すべてをrejectするフィルタが設置されます。これより後に許可するフィルタを適用しても、まったく意味がありません。よって、先頭に適用しておくことをおすすめします。
これにより、外部からサーバーへアクセスできるようになりました。
まとめ
いかかでしたか?
設定が完了したら、試しにポート開放チェックツールでチェックしてみましょう。
アクセスする際にはサーバーのローカルIPではなく、ルーターのグローバルIPを指定することに注意してください。
仕組みが理解できていないと、何が何だか分からない方も多いかもしれませんが、設定しているうちにわかるようになってきます。今回の方法はWebカメラや各種IoT機器のグローバル公開にも使用できます。これらの機器をお持ちの方は、ぜひチャレンジしてみてください。
もちろんサーバー側のセキュリティ対策も忘れずに!
コメント
とても参考になりました。ありがとうございます。