ローカル環境のWebサーバをインターネットに公開したい（二重ルータ構成）

# 目的
ローカル環境に構築したWebサーバを、インターネットに公開
# 前置き
**ルータが２機**
今回紹介する記事においての注意点である。
書籍やサイトで一般的なインターネット公開の方法を調べて試しても成功しない、という読者がいるかもわからないが、それが原因かもしれない（筆者がそうであった）。
俗にいう「二重ルータ」であるが、筆者はこの構成のままで挑戦した。

以下失敗談：
過去に書籍を読みながら、サーバを外部に公開しようと試したが、なぜか外部のネットワークからサーバにアクセスできない。デフォルトゲートウェイに正しくポートフォワーディングやDMZの設定をしているのに、だ。当時は自宅でVPNサーバの構築という挑戦もしていたため、新しいルータを購入しようといろいろ調べていたところ、どうやら我が家の**NTTのONUが無線LAN機能も搭載**しているということを知った。実質、ルータが２機あるということだ。

↓が我が家のネットワーク構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/ab249028-7e4d-5dcf-b849-de81c898e8d0.png)
つまり、Ubuntuサーバからインターネットへ接続するには、ルータだけではなく**ONU付属のLANの設定**もしなければならないのである。これが筆者の環境で上手くいかなかった原因であった。

<INS>もし同じような構成で、インターネット公開ができない方はONUのマニュアルを調べてみてほしい。</INS>

さて、重要事項の説明をしたところで、方法の説明に入る。

# 環境
### マシン側
- Ubuntu Server22.04 TLS
- Apache/2.4.52
### ルーター
- RS-500MI（NTT）
- WRC2533-GST2 (エレコム)
# 手順

1. デフォルトゲートウェイ（ルータ）でポートフォワーディングを設定する
2. ONUのポートフォワーディングを設定する
3. 外部からアクセス
# 前提条件
- ドメイン取得済みであること
# 実践
### ①ルータでポートフォワーディングを設定
目的はUbuntu Serverとルータ間でのポート開放である

まずはルータの設定画面にアクセス
ブラウザでルータのローカルIPアドレスを指定すると開くことができる
IPアドレスの確認方法は
`$ ip route show`
と打つ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/370f0400-2a86-b08b-0481-d446cf8f78ca.png)
筆者の環境では、192.168.2.1がデフォルトゲートウェイのアドレスだ

ポートフォワーディングの設定を記述する

Ubuntu ServerのIPアドレス（192.168.2.2）とWebで最も使われるポート番号80（HTTP）, 443（HTTPS）を指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/e266faf5-6cad-d30c-81df-0f3022fd87e0.png)

:::note warn
- ルータの設定画面や各種設定方法はメーカーごとに異なるため、取扱説明書やネット上の公式マニュアルを参考にするのが望ましい

- メーカーによってはポートフォワーディングではなく「ポートマッピング」や「ポート変換」と記載されていることも
:::

これでUbuntu Server-ルータ間でのポートの指定が完了した

続いて、ルータ-ONU間でのポートフォワーディングの設定に移る

### ②ONUのポートフォワーディング設定
先ほどと同じように、ONUの設定画面にアクセスする

ONUのIPアドレスは、ルータのWAN側のデフォルトゲートウェイの欄を確認するか、同じネットワーク内の他の機器でのtraceroute系コマンド（経由するルータのIPアドレスを表示）で確認できる

エレコムルータの設定画面↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/b51d7e50-7774-b09c-de0f-cfaa9ed3dcac.png)

WindowsでGoogle Public DNSのIPアドレスである8.8.8.8を指定した場合↓
`$tracert -d 8.8.8.8`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/9e65053f-db22-f12b-544a-51099e5aa7d8.png)

筆者のONUのIPアドレスは168.192.1.1であることがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/7897bcb6-1737-4f95-6609-1da41c3081fe.png)


さて、設定画面にアクセスしたはいいものの、実は筆者の使用する機器の、一般の設定画面ではポートフォワーディングの設定ができない

そこで、IPアドレスに続けて「:8888/t」を指定
「http\://192.168.1.1:8888/t/」とすることで別の設定画面にアクセスできた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/9450107a-b7ee-38e9-d461-fe0f5ddffb55.png)

このページでポートフォワーディングなどの設定をするには、別途ユーザ名とパスワードが必要になるので作成する

「IPv4設定」を開くとTopページに利用可能ポートが表示されている
後に必要になるのでどれを使うか決めておく（筆者は4512）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/f3e2eb31-cf35-9310-41b6-0e2ef967ecf4.png)

「静的NAPT設定」を開き、エントリに登録する

ここで注意なのが、ルータのローカル（LAN側）IPアドレス（筆者の場合は192.168.2.1）ではなく、WAN側のIPアドレス（筆者の場合は192.168.1.2）を入力しなければいけない点だ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/4b81b6a6-0eb2-a0a8-1d8c-ed18c97b5a81.png)

ルータにはWAN・LAN側でIPアドレスを持ち、使い分けが必要だ

Ubuntu Serverとのポートフォワーディングでは192.168.2.1を、ONUとのポートフォワーディングでは192.168.1.2を指定する（ONUのIPアドレスと同じサブネットに所属）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/0bcf464a-ecdf-e57f-7830-6c49d0955814.png)

IPv4通信が有効であることを確認したら設定を反映し、実際にアクセスしてみる

### ③アクセス
大前提として、アクセスできるかのテストは外部ネットワークに属する機器からでなければならない
筆者はスマホにてキャリア回線を使ってテストした

また、アクセス時に重要なことはドメイン名のあとに**ポート番号**も指定することである（ポート番号が80であれば省略できるらしいが、ONU設定において80番が使えなかったため）

②でエントリに登録したポート番号（筆者の場合は4512）を「:4512」として加え
「http\://サーバのドメイン名:ポート番号/」とブラウザのアドレスバーに入力する

筆者の場合は「http\://guchibu.mydns.jp:4512」となる
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/08301b38-b4be-6c8b-f778-be11ca00a4b7.png"/>

成功だ

### 補足
[前回の記事](https://qiita.com/shutax/items/810c8aa21c8cd3c16b25#%E7%9B%AE%E7%9A%84)の読者は「http\://サーバのドメイン名:ポート番号/test.html」でアクセスすれば、作成したhtmlファイルを閲覧することができる

筆者の「http\://guchibu.mydns.jp:4512/test.html」でアクセスした場合↓

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3418025/5c7bf69d-5a72-6d83-368a-5494c9b098df.png"/>

# 最後に
二重ルータという時点で構成を見直すべきところではあるが、こうした冗長な構成に対してポートフォワードを設定するのは、パケットがどういうルートで流れるか、またそれを制御するかの理解にちょうど良かったと思う。