DNSは引けるが特定ポートだけ通信できない原因

  • URLをコピーしました!

「DNSは正常に引ける」
「pingも通る」
「80番は通るのに443番だけNG」
「同じIPなのにポートによって結果が違う」

この症状はネットワーク・OS・ミドルウェア・LBどこか1箇所でも設計ミスがあると必ず発生します。

本記事では、特定ポートだけ通信できない時の原因を体系的に整理し、 現場でそのまま使える切り分け手順と対策を解説します。

目次

まず結論:原因はほぼ5パターンに集約される

  1. ポート自体がLISTENしていない
  2. Firewallでポート単位に遮断されている
  3. SELinuxがポートを許可していない
  4. LB/NW機器がポート単位で制御している
  5. アプリが接続を即切断している

DNSはIPを引くだけなので、この問題には直接関与しません。

① 本当に「そのポート」がLISTENしているか

最初に確認すべきはサーバ側でポートが開いているかです。

# LISTENポート確認
ss -lntp

# 特定ポートのみ確認
ss -lntp | grep 443

ありがちな原因

  • 設定ファイルでは有効だがプロセス未起動
  • 127.0.0.1でのみLISTENしている

対策

  • 0.0.0.0 / :: でLISTENしているか確認
  • systemdの起動状態を確認
systemctl status nginx

② クライアント側からポート疎通を明示的に確認

pingが通っても、TCP/UDPは別物です。

# TCP疎通確認
nc -vz example.com 443

# curlで実通信
curl -v https://example.com

結果の読み方

  • timeout → FW / 経路
  • refused → ポート未LISTEN
  • 即切断 → アプリ / LB

③ Firewall(firewalld / iptables)によるポート遮断

ポート単位で遮断されているケースは非常に多いです。

firewalld確認

firewall-cmd --list-all

iptables確認

iptables -L -n

よくあるミス

  • 80番だけ許可して443を忘れる
  • INPUTはOKだがOUTPUTが制限されている

対策

  • 対象ポートが明示的に許可されているか確認
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

④ SELinuxが「そのポート」を拒否している

SELinuxはポート番号単位で通信を制御します。

SELinux状態確認

getenforce

ポート許可状況確認

semanage port -l | grep http

典型的な失敗

  • Apacheを非標準ポートで起動
  • ポートをsemanageに登録していない

対策

# 例:8080をhttpとして許可
semanage port -a -t http_port_t -p tcp 8080

AVCログ確認

ausearch -m AVC -ts recent

⑤ LB(ロードバランサ)のポート設定ミス

LB配下ではポート単位の設計ミスが非常に多発します。

よくある原因

  • LB → バックエンドの転送ポート不一致
  • health checkは通るが実通信は別ポート
  • idle timeout切れ

対策

  • LBのリスナーポートと転送先確認
  • バックエンドFWも併せて確認

⑥ 経路・NATで特定ポートだけ破棄される

NW機器ではポート単位で制御されている場合があります。

確認

traceroute example.com

クラウド環境では以下も要確認です。

  • Security Group
  • NACL
  • ルーティングテーブル

⑦ アプリが接続を拒否・即切断している

ポートは開いているが、アプリが拒否するケースです。

典型例

  • 接続数上限
  • IP制限
  • 認証前に切断

確認

# 接続状態確認
ss -ant | grep 443

対策

  • アプリログ確認
  • max connection設定見直し

即解決のためのチェックリスト

  • ポートはLISTENしているか
  • FWで許可されているか
  • SELinuxポート登録済みか
  • LB設定に不整合はないか
  • アプリが拒否していないか

まとめ

「DNSは引けるが特定ポートだけ通信できない」場合、

  • DNSは原因ではない
  • ポート単位の制御が必ず存在する

LISTEN → FW → SELinux → LB → アプリの順で切り分ければ、 いち早く原因へ辿り着けます。

目次