前の記事では、「容量がいっぱい」「重い」ときの調べ方を学びました。今回は、サーバーでよく起きるもう1つの「困った」、つながらないときの調べ方です。
よくあるのが、n8n(=画面上で「ノード」というブロックをつないで、自動化の流れを作れるツール)から自分の API にアクセスできなくなったとき、「ネットワークがおかしい」と思いこんで、ルーターを再起動したり、設定を書きかえたりしてしまうパターンです。私も最初は、こういう遠回りで時間を溶かしがちでした。最後に curl -v を打ってみたら「Connection refused」で、原因は API(=プログラム同士がデータをやりとりするための窓口)のプログラムが止まっていただけ、ということもあります。最初に正しい順番で調べれば、すぐに終わる話です。
この記事では、自分のパソコンの中に小さな Web サーバーを立てて、わざと「つながらない」状態を3種類作ります。エラーの文の違いから、どこで止まっているかを見分ける練習をしましょう。
- 「つながらない」を、内側から外側へ順番に切り分ける考え方
-
ping・ipで、自分の足もとと経路を確かめる方法 -
getent・digで、名前解決(DNS)を確かめる方法 -
ssで、ポート(=1台のコンピューターの中で、どのサービスにつなぐかを分ける番号)で待っているプログラムを確かめる方法 -
curl -vのエラーの文から、原因の場所を見分ける方法
- IP アドレス・ポート・DNS(=ドメイン名を IP アドレスに置きかえる、インターネットの電話帳のようなしくみ)のざっくりした意味がわかる
-
curlで Web ページを取ってきたことがある -
sudoとaptを使える
まだの方は、前の記事「Linuxで「容量がいっぱい」「重い」を調べる|df・du・free・top【初心者向け】」から読むのがおすすめです。IP アドレスやポートについては「Linuxのネットワークの基本|IPアドレス・ポート・DNSをざっくり理解【初心者向け】」でくわしく説明しています。
- HTTP:ブラウザや curl が Web サーバーとやりとりするときの決まり
- awk:行を列に分けて、集計や取り出しをするコマンド
- コンテナ:アプリと、動かすのに必要なものをひとまとめにした箱。Docker で動かします
- 待ち受け(リッスン):プログラムが、決まったポートで通信が来るのを待っている状態
用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。
結論:内側から外側へ、1段ずつ確かめる
| 確かめる段 | コマンド | うまくいかないときの表示の例 |
|---|---|---|
| ① 自分の足もと | ping -c 3 127.0.0.1、ip route | default の行がない |
| ② 名前解決(DNS) | getent hosts 名前、dig 名前 | Could not resolve host |
| ③ 相手まで届くか | ping -c 3 名前 | 100% packet loss |
| ④ ポートで待っているか | ss -tln、curl -v | Connection refused |
| ⑤ 途中でさえぎられていないか | curl -v --max-time 5 | Connection timed out |
| ⑥ アプリの返事 | curl -v の HTTP の数字 | 404・500 など |
準備:練習用のディレクトリと道具
- 1
- 2
- 3
- 4
- 5
mkdir -p ~/linux-practice/net-trouble-test
cd ~/linux-practice/net-trouble-test
sudo apt update
sudo apt install bind9-dnsutils
dig -vここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSL(=Windows の中で Linux を動かせる、Microsoft のしくみ)では、表示が少し違うことがあります。
(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
kaito@demo:~/linux-practice/net-trouble-test$ sudo apt update
Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
Fetched 231 kB in 0s (4537 kB/s)
All packages are up to date.
kaito@demo:~/linux-practice/net-trouble-test$ sudo apt install bind9-dnsutils
Installing:
bind9-dnsutils
Installing dependencies:
bind9-host libfstrm0 liblmdb0 libprotobuf-c1 libuv1t64
bind9-libs libjemalloc2 libmaxminddb0 liburcu8t64 libxml2
Suggested packages:
mmdb-bin
Summary:
Upgrading: 0, Installing: 11, Removing: 0, Not Upgrading: 0
Download size: 2791 kB
Space needed: 8279 kB / 107 GB available
Continue? [Y/n] Y
…(途中省略)…
Setting up bind9-dnsutils (1:9.20.30-1~deb13u1) ...
Processing triggers for man-db (2.13.1-1) ...
Processing triggers for libc-bin (2.41-12+deb13u4) ...
kaito@demo:~/linux-practice/net-trouble-test$ dig -v
DiG 9.20.30-1~deb13u1-Debian検証環境(Debian 13)では、dig は最初は入っていませんでした。bind9-dnsutils と、必要な部品10個がいっしょに入り、合わせて11個になりました。途中の長い表示は省略しています。すでに入っている場合は、is already the newest version と表示されます。
dig は、DNS に名前を問い合わせる道具です。Debian では bind9-dnsutils というパッケージ(=ソフトをインストールしやすいように、ひとまとめにしたもの)に入っています。
STEP 1:自分の足もとを確かめる
まず、自分自身(127.0.0.1)に ping を打ちます。ここで失敗するなら、ネットワークより前の問題です。
- 1
- 2
- 3
ping -c 3 127.0.0.1
ip -br addr
ip route(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
kaito@demo:~/linux-practice/net-trouble-test$ ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=127 time=0.054 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=127 time=0.021 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=127 time=0.019 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2027ms
rtt min/avg/max/mdev = 0.019/0.031/0.054/0.016 ms
kaito@demo:~/linux-practice/net-trouble-test$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UNKNOWN 192.168.1.20/24 fe80::a1b2:c3ff:fed4:e5f6/64
kaito@demo:~/linux-practice/net-trouble-test$ ip route
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20IP アドレスとネットワークの名前(eth0)は、ダミーに置き換えています。ttl=127 の数字は、検証環境(コンテナ)の設定によるもので、ふつうは ttl=64 と表示されることが多いです。
ip route の default via … は、「外に出るときは、この出口(ルーター)を通る」という意味です。この行がないと、外のサーバーにはつながりません。
STEP 2:名前解決(DNS)を確かめる
ブラウザやコマンドで使う example.com のような名前は、まず DNS で IP アドレスに変換されます。ここで失敗すると、相手がどこにいるかすらわかりません。
- 1
- 2
- 3
getent hosts example.com
dig example.com +short
dig kaito-nothing.invalid(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
kaito@demo:~/linux-practice/net-trouble-test$ getent hosts example.com
203.0.113.10 example.com
kaito@demo:~/linux-practice/net-trouble-test$ dig example.com +short
203.0.113.10
kaito@demo:~/linux-practice/net-trouble-test$ dig kaito-nothing.invalid
; <<>> DiG 9.20.30-1~deb13u1-Debian <<>> kaito-nothing.invalid
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50306
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;kaito-nothing.invalid. IN A
;; ANSWER SECTION:
kaito-nothing.invalid. 30 IN A 203.0.113.10
;; Query time: 3 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
;; WHEN: Sun Nov 01 04:14:51 JST 2026
;; MSG SIZE rcvd: 55IP アドレスは、説明用のダミー(203.0.113.10・192.168.1.1)に置き換えています。
ふつうの回線では、この問い合わせは status: NXDOMAIN(「その名前は存在しません」という意味)になるのが一般的です。ただし、環境により異なります。検証環境の DNS は、存在しない名前にもアドレスを返す設定だったため、上のように status: NOERROR(ANSWER: 1)になりました。.invalid は、絶対に存在しない名前として決められている練習用の名前です。
getent hosts は、パソコンがふだん使うのと同じ方法(/etc/hosts を見てから DNS に聞く)で調べます。dig は DNS に直接聞きます。両方の結果が違うときは、/etc/hosts に古い書き込みが残っていないか疑いましょう。
STEP 3:相手まで届くかを確かめる
- 1
ping -c 3 example.com(例)
- 1
- 2
- 3
- 4
- 5
kaito@demo:~/linux-practice/net-trouble-test$ ping -c 3 example.com
PING example.com (203.0.113.10) 56(84) bytes of data.
--- example.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2039ms検証環境では、外への ping が通らない制限があり、100% packet loss になりました。
ping に返事がなくても、すぐに「つながらない」とは決めつけないでください。セキュリティのために、ping に返事をしない設定のサーバーもたくさんあります。Web サイトなら、次の curl -v で確かめるのが確実です。
STEP 4:curl -v で「どこまで進んだか」を見る
-v(verbose)をつけると、curl が何をしているかを1行ずつ見せてくれます。
- 1
curl -v https://example.com -o /dev/null(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
kaito@demo:~/linux-practice/net-trouble-test$ curl -v https://example.com -o /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Host example.com:443 was resolved.
* IPv6: (none)
* IPv4: 203.0.113.10
* Trying 203.0.113.10:443...
…(途中省略)…
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
…(途中省略)…
* Connected to example.com (203.0.113.10) port 443
* using HTTP/2
…(途中省略)…
> GET / HTTP/2
> Host: example.com
> User-Agent: curl/8.14.1
> Accept: */*
…(途中省略)…
< HTTP/2 200
< date: Sat, 31 Oct 2026 19:15:06 GMT
…(途中省略)…
* Connection #0 to host example.com left intactとても長い出力なので、大事な行だけを残して途中を省略しています。was resolved(名前解決できた)→ Trying(つなぎに行く)→ SSL connection using(暗号化の準備ができた)→ Connected to(つながった)→ < HTTP/2 200(相手のアプリが「OK」と返した)の順に進んでいます。IP アドレスはダミーに置き換えています。
| 行の始まり | 意味 |
|---|---|
* | curl の作業メモ(名前解決・接続・暗号化など) |
> | こちらから送った内容 |
< | 相手から返ってきた内容 |
名前解決に失敗するときの例です。
- 1
curl -v https://kaito-nothing.invalid(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
kaito@demo:~/linux-practice/net-trouble-test$ curl -v https://kaito-nothing.invalid
* Host kaito-nothing.invalid:443 was resolved.
* IPv6: (none)
* IPv4: 203.0.113.10
* Trying 203.0.113.10:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS alert, decode error (562):
* TLS connect error: error:0A000126:SSL routines::unexpected eof while reading
* closing connection #0
curl: (35) TLS connect error: error:0A000126:SSL routines::unexpected eof while readingふつうの回線では、名前が見つからないので curl: (6) Could not resolve host: kaito-nothing.invalid になるのが一般的です。ただし、環境により異なります。検証環境では、DNS が存在しない名前にもアドレスを返したため、名前解決は「できてしまい」、そのアドレスとの暗号化の途中で失敗して curl: (35) TLS connect error になりました。
このように、エラーの文が予想とちがうときは、was resolved や Trying の行を見て、「どこまで進んだか」を確かめるのが大切です。
STEP 5:小さなサーバーを立てて、3種類の「つながらない」を作る
自分のパソコンの中だけで動く Web サーバーを立てます。--bind 127.0.0.1 をつけているので、外のパソコンからはつながりません。
- 1
- 2
echo "kaito のテストページです" > index.html
python3 -m http.server 8000 --bind 127.0.0.1(例)
- 1
- 2
kaito@demo:~/linux-practice/net-trouble-test$ python3 -m http.server 8000 --bind 127.0.0.1
Serving HTTP on 127.0.0.1 port 8000 (http://127.0.0.1:8000/) ...このターミナルはそのままにして、もう1つターミナルを開いて、ポートで待っているプログラムを確かめます。
- 1
- 2
ss -tln
ss -tln | grep 8000(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
kaito@demo:~$ ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 127.0.0.1:8000 0.0.0.0:*
LISTEN 0 5 127.0.0.1:3142 0.0.0.0:*
LISTEN 0 20 127.0.0.1:25 0.0.0.0:*
LISTEN 0 20 [::1]:25 [::]:*
kaito@demo:~$ ss -tln | grep 8000
LISTEN 0 5 127.0.0.1:8000 0.0.0.0:*127.0.0.1:3142 は、検証環境で使っている apt のダウンロード用の中継のものです。読者の環境では表示されません。:25 の2行は、Debian に最初から入っているメール配送のプログラム(exim4)です。どちらも 127.0.0.1 や [::1] だけで待っているので、外からは見えません。
ss の -t は TCP、-l は待ち受け中(LISTEN)、-n は数字のまま表示、という意味です。sudo ss -tlnp とすると、どのプログラムが待っているかも表示されます。
では、3種類のアクセスを試します。
- 1
- 2
- 3
curl -v http://127.0.0.1:8000/
curl -v http://127.0.0.1:8001/
curl -v --max-time 5 http://192.0.2.1/(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
kaito@demo:~$ curl -v http://127.0.0.1:8000/
* Trying 127.0.0.1:8000...
* Connected to 127.0.0.1 (127.0.0.1) port 8000
* using HTTP/1.x
> GET / HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/8.14.1
> Accept: */*
>
* Request completely sent off
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: SimpleHTTP/0.6 Python/3.13.5
< Date: Sat, 31 Oct 2026 19:15:16 GMT
< Content-type: text/html
< Content-Length: 34
< Last-Modified: Sat, 31 Oct 2026 19:15:09 GMT
<
kaito のテストページです
* shutting down connection #0
kaito@demo:~$ curl -v http://127.0.0.1:8001/
* Trying 127.0.0.1:8001...
* connect to 127.0.0.1 port 8001 from 127.0.0.1 port 38140 failed: Connection refused
* Failed to connect to 127.0.0.1 port 8001 after 0 ms: Could not connect to server
* closing connection #0
curl: (7) Failed to connect to 127.0.0.1 port 8001 after 0 ms: Could not connect to server
kaito@demo:~$ curl -v --max-time 5 http://192.0.2.1/
* Trying 192.0.2.1:80...
* Connection timed out after 5002 milliseconds
* closing connection #0
curl: (28) Connection timed out after 5002 milliseconds1つ目は HTTP/1.0 200 OK のあとにページの中身が返ってきました。2つ目は Connection refused(誰も待っていない)で、最後の行は curl: (7) … Could not connect to server です。3つ目は curl: (28) Connection timed out after 5002 milliseconds で、5秒待ってあきらめています。
192.0.2.1 は、説明用に決められた「どこにもつながらない」アドレスです。--max-time 5 で、5秒であきらめるようにしています。
| エラーの文 | 何が起きているか | 次に見るところ |
|---|---|---|
| Could not resolve host | 名前から IP アドレスがわからない | 名前のつづり、DNS、/etc/hosts |
| Connection refused | 相手には届いたが、そのポートで誰も待っていない | ポート番号、サービスが動いているか(ss・systemctl status) |
| Connection timed out | 途中で返事がなくなった | ファイアウォール、相手が止まっていないか、IP アドレス |
| HTTP の 404・500 など | つながったが、アプリがエラーを返した | URL のパス、アプリのログ |
最初のターミナルを見ると、"GET / HTTP/1.1" 200 のようなアクセスの記録が出ているはずです。
(例)
- 1
- 2
- 3
kaito@demo:~/linux-practice/net-trouble-test$ python3 -m http.server 8000 --bind 127.0.0.1
Serving HTTP on 127.0.0.1 port 8000 (http://127.0.0.1:8000/) ...
127.0.0.1 - - [01/Nov/2026 04:15:16] "GET / HTTP/1.1" 200 -1つ目の curl のアクセスだけが記録されています。2つ目(ポート 8001)と3つ目(192.0.2.1)は、このサーバーには届いていないからです。サーバー側のログで「そもそも届いているか」を確かめるのも、大事な切り分けです。
この記事は、自分のパソコンの中だけで練習しました。VPS(=大きな物理サーバーを区切って作った、自分専用の仮想サーバーを、月額などで借りられるサービス)で「サーバーの中では curl が通るのに、自分の PC のブラウザからはつながらない」ときは、外側に向かって次の3つの壁を順に見ます。
- 待ち受けの場所:
ss -tlnのLocal Addressが127.0.0.1:ポートなら、サーバーの中からしか見えません(この記事の STEP 5 と同じ形です)。外に見せるかどうかは、セキュリティ基礎の記事の表で確かめます。Docker(=アプリを、必要なものごと「コンテナ」という箱に入れて動かす道具)で動かしているときは、-p 127.0.0.1:5678:5678のように書いたかどうかも関係します(Docker 入門の記事と、VPS で n8n を動かす記事)。 - サーバーのファイアウォール(ufw):
sudo ufw statusで、そのポートが許可されているかを見るだけにします(VPS の初期設定の記事)。Debian 13 の ufw(=Debian・Ubuntu で使える、ファイアウォールをかんたんに設定するための道具)は、最初の設定で「外から入ってくるものは、返事をせずに捨てる」(DROP)になっています。そのため、許可していないポートは、返事が来ないままConnection timed outになるのがふつうです(設定を変えていると、ちがう結果になることがあります)。 - VPS の管理画面のファイアウォール:VPS の会社によっては、管理画面にも別のファイアウォール(=通信を、決めたルールで通したり止めたりする門番)があります。ここで閉じていても、サーバーの中からは何も見えません。あるかどうかは VPS の会社により異なります。
「1つずつ見て、1つずつ直す」のは、ここでも同じです。下の🚫の箱のとおり、ファイアウォールを止めて試すのはやめましょう。
検証では、ufw を入れたり動かしたりはせず、Debian 13 の ufw のパッケージ(0.36.2-9)をダウンロードして、最初の設定ファイル /etc/default/ufw の中身だけを読みました。command -v ufw; echo $? の 1 は、ufw が入っていないという意味です。
- 1
- 2
- 3
- 4
command -v ufw; echo $?
apt-get download ufw
ls
dpkg-deb --fsys-tarfile ufw_*.deb | tar -xO ./etc/default/ufw | grep -n "POLICY="(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
kaito@demo:~/linux-practice/net-trouble-test$ command -v ufw; echo $?
1
kaito@demo:~/linux-practice/net-trouble-test$ apt-get download ufw
Get:1 http://deb.debian.org/debian trixie/main amd64 ufw all 0.36.2-9 [169 kB]
Fetched 169 kB in 0s (7348 kB/s)
kaito@demo:~/linux-practice/net-trouble-test$ ls
ufw_0.36.2-9_all.deb
kaito@demo:~/linux-practice/net-trouble-test$ dpkg-deb --fsys-tarfile ufw_*.deb | tar -xO ./etc/default/ufw | grep -n "POLICY="
11:DEFAULT_INPUT_POLICY="DROP"
15:DEFAULT_OUTPUT_POLICY="ACCEPT"
19:DEFAULT_FORWARD_POLICY="DROP"
24:DEFAULT_APPLICATION_POLICY="SKIP"11行目の DEFAULT_INPUT_POLICY="DROP" が「入ってくるものは捨てる」という設定です。捨てられたパケットには返事がないので、curl は時間切れまで待つことになります。
「とりあえずファイアウォールを止めてみる」(sudo ufw disable や sudo iptables -F)は、サーバーを丸裸にする操作です。止めたまま忘れると、誰でも入れる状態になります。また、サーバーを --bind 0.0.0.0 で動かすと、同じネットワークや、場合によってはインターネット全体から見えるようになります。/etc/resolv.conf を手で書きかえるのも、別のしくみに上書きされたり、名前解決が全部止まったりする原因になります。他人のサーバーに対して、ポートを片っぱしから調べるツールを使うのもやめましょう。この記事のように、まずは見るだけのコマンドで原因の場所をしぼることが大切です。
🤖 詰まったらAIに聞こう:どこで止まっているかわからない
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Linuxの初心者です。サーバー(またはAPI)につながらなくて困っています。
次の結果から、どの段階(名前解決・経路・ポート・ファイアウォール・アプリ)で
止まっていそうかと、次に確かめるコマンドを教えてください。
【つなぎたい相手】例:自分のVPSのn8n(ドメイン名は example.com に置き換え)
【curl -v の結果】ここに貼る
【dig 名前 +short の結果】ここに貼る
【ss -tln の結果(サーバー側)】ここに貼る
【直前にしたこと】例:ポート番号を変えた、サーバーを再起動したcurl -v の結果には、Authorization や Cookie の行(ログインの合い言葉)が出ることがあります。この行は必ず消すか「***」にしてください。サーバーの 本物の IP アドレスやドメイン名も、203.0.113.10 や example.com のようなダミーに置き換えてから貼りましょう。
後片づけ
最初のターミナルで Ctrl + C を押して、Web サーバーを止めます。そのあと、もう1つのターミナルで次を打ちます。
- 1
- 2
- 3
- 4
ss -tln | grep 8000
cd ~/linux-practice
rm -r net-trouble-test
ls最初のターミナルで Ctrl + C を押すと、次のように表示されてサーバーが止まります。
(例)
- 1
- 2
^C
Keyboard interrupt received, exiting.もう1つのターミナルの ss -tln | grep 8000 は、何も表示されませんでした(もう待っていない)。そのあとの片づけの結果です。
(例)
- 1
- 2
- 3
- 4
kaito@demo:~$ ss -tln | grep 8000
kaito@demo:~/linux-practice$ rm -r net-trouble-test
kaito@demo:~/linux-practice$ ls
archive-test chmod-test edit-test find-test grep-test link-test perm-test redirect-testnet-trouble-test がなくなりました。ほかのフォルダは、これまでの記事の練習で作ったものです。
bind9-dnsutils は、このあとも調べものに使えるので、入れたままで大丈夫です。
よくある質問
Q. ping は 100% packet loss なのに、curl ではつながります。
ping の通信(ICMP)だけを止めている相手やネットワークがあります。ping が通らなくても、相手が止まっているとは限りません。Web サーバーなら、この記事の STEP 4 のように curl -v で確かめるのが確実です。
Q. WSL の中で動かしたサーバーに、Windows のブラウザからつながりません。
WSL の設定や Windows のバージョンによって、localhost(=自分自身を指す特別な名前)でそのままつながる場合と、つながらない場合があります。環境により異なります。まず WSL の中で curl -v http://127.0.0.1:ポート/ が通るかを確かめ、通るなら WSL と Windows の間の設定を調べましょう。
Q. Connection refused と Connection timed out は、どちらが「近い」ですか?
refused は「相手のパソコンまでは届いたが、そのポートで誰も待っていない」ので、相手のすぐ近くまで来ています。timed out は「途中で返事がなくなった」ので、ファイアウォールや経路など、もっと手前で止まっていることがあります。この記事の STEP 5 のエラーの表が、そのまま次に見るところの目安になります。
まとめ
- 「つながらない」は、内側から外側へ1段ずつ確かめる
- 名前解決は
getent hosts・dig。NXDOMAIN は「その名前はない」 -
pingに返事がなくても、つながらないとは限らない -
curl -vのエラーの文で場所がわかる。resolve は DNS、refused はポート、timed out は途中 -
ss -tlnで、どのポートで待っているかを見る。127.0.0.1 で待っているものは外から見えない - ファイアウォールを止めて試すのは、やめておく
次の記事では、sed と awk を学びます。ログの中から必要な列だけを取り出したり、数を数えたりする、1行の便利なコマンドです。
次に読む記事
関連する記事
- n8nとは?最初のワークフローを1本つくる:n8n から API や Webhook につながらないときの前に、基本を確かめたい方に
- Cursorにエラーを直してもらう5ステップ|エラーの渡し方・頼み方・直った後の確認まで:エラーの文を AI に上手に渡したい方に
- 自動化スタック総覧|GAS・n8n・Python・Notionの使い分け:どの自動化がどこと通信しているかを整理したい方に