1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

0.0.0.0 と 127.0.0.1 と localhost の違い

Last updated at Posted at 2023-12-20

違い

◯ 127.0.0.1 と localhost

同じものになります。

あるいは localhost は 127.0.0.1 の別名と言ってもいいかもしれません。nslookup コマンドで対応付を見てみます。

$ nslookup localhost
...

Name:	localhost
Address: 127.0.0.1
Name:	localhost
Address: ::1
$

/etc/hosts を削除してもこの挙動は変化しませんでした。もしかしたら対応付を消す方法があるのかもしれません。

◯ 127.0.0.1 と 0.0.0.0

  • 127.0.0.1 ... PC の中だけで通信を行う場合に使います。
  • 0.0.0.0 ... PC の外と通信を行う場合に使います。

例えば

127.0.0.1 と 0.0.0.0 について説明します。

◯ 前提

  • PC には 192.0.2.2 が割り当てたとします。
  • ウェブサーバ Uvicorn をポート番号 80 で立ち上げたとします。
  • データベースサーバ PostgreSQL ポート番号 5432 で立ち上げたとします。
  • ウェブサーバとデータベースサーバを1つの PC の中で立ち上げたとします。

◯ 前提 ウェブサーバ

ウェブサーバは外部と通信が必要になるので 0.0.0.0 を設定します。

$ # Uvicorn を起動
$ uvicorn app:app --host 0.0.0.0
  • Uvicorn の --host のデフォルト値は 127.0.0.1

◯ 前提 データベースサーバ

データベースサーバはウェブサーバとだけ通信をすればよいので 127.0.0.1 を設定します。

postgresql.conf
listen_addresses = '127.0.0.1'
$ # PostgreSQL を起動
$ postgres -D /etc/postgresql/10/main
  • PostgreSQL の listen_addresses デフォルト値は localhost

◯ 結果

外部からウェブサーバには 192.0.2.2:80 でアクセスすることができますが、データベースサーバには外部から 192.0.2.2:5432 でアクセスすることはできません。

データベースサーバにはウェブサーバから 127.0.0.1:5432 でアクセスすることができます。

ネットワークインターフェイス

1つの PC は複数のネットワークインターフェイスを持つことができます。ネットワークインターフェイスはそれぞれが IP アドレスを持つことができます。Windows なら ipconfig コマンド, macOS, Ubuntu なら ifconfig コマンドで確認することができます。

以下は Ubuntu での実行結果です。1台の PC が複数のネットワークインターフェイス, IP アドレスを持っていることがわかります。

$ ifconfig | grep "inet "
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255
        inet 172.20.0.1  netmask 255.255.0.0  broadcast 172.20.255.255
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet 127.0.0.1  netmask 255.0.0.0
        inet 192.168.11.2  netmask 255.255.255.0  broadcast 192.168.11.255
$

ウェブサーバを起動する際に 192.0.2.2 を指定せず 0.0.0.0 を指定すると、外部からすべてのネットワークインターフェイス、複数のIPアドレスを経由してアクセスしてもらうことができます。ウェブサーバに対しては 127.0.0.1 でも 192.168.11.2 でも 172.17.0.1 でも... 通信が可能になります。

一方でデータベースサーバはウェブサーバとだけ通信が可能です。

ただし 0.0.0.0 を指定することは一般的に開発環境でのみ推奨され、本番環境では適切なセキュリティ対策を講じる必要があります(ChatGPT からの引用です、不要なネットワークインターフェイスを閉じろ、ということを言っているのでしょうか? https://bit.ly/48swjhx )。

参考

すいません、別のタイトルが思いつきませんでした... orz

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?