私はこれを実行していますUbuntu server 22.04
が、私のローカルコンピュータにユニークなポート転送の問題があります。本機には2つのイーサネットインターフェースがあり、接続されているenp1s0
インターフェースにはIPアドレスがあります192.168.1.50
。完全なIP設定は次のとおりです。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:e0:4f:68:02:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.50/24 metric 100 brd 192.168.1.255 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 240f:74:de92::d1e/128 scope global dynamic noprefixroute
valid_lft 35597sec preferred_lft 35597sec
inet6 fd41:d8b6:99ba::d1e/128 scope global dynamic noprefixroute
valid_lft 35597sec preferred_lft 35597sec
inet6 fd41:d8b6:99ba:0:2e0:4fff:fe68:2bb/64 scope global mngtmpaddr noprefixroute
valid_lft forever preferred_lft forever
inet6 240f:74:de92:0:2e0:4fff:fe68:2bb/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 98462sec preferred_lft 98462sec
inet6 fe80::2e0:4fff:fe68:2bb/64 scope link
valid_lft forever preferred_lft forever
3: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:e0:4c:68:01:6e brd ff:ff:ff:ff:ff:ff
altname enp2s0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:55:86:e6:e5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
from wan to port 22211
着信TCPまたはUDPパケットを受信するようにルーターのポート転送ルールを設定しました。forwarded to lan 192.168.1.50 port 22211
私のufw
設定では、このポートへのルーティングを許可します。
$ sudo ufw status
[sudo] password for *
Status: active
To Action From
-- ------ ----
22211/tcp ALLOW Anywhere
22211/tcp (v6) ALLOW Anywhere (v6)
nc -l -p 22211
このポートに対して単純なnetcatソケット()を起動すると、telnet
ローカルネットワーク上の他のコンピュータからそのポートにアクセスできるようになります。tcudump
別のローカルコンピュータからリモートでログインしたときのログ。接続して手紙を送信し、a
Enter キーを押します。
$ sudo tcpdump -pnvvi enp1s0 port 22211
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
21:01:48.350024 IP (tos 0x0, ttl 64, id 59572, offset 0, flags [DF], proto TCP (6), length 60)
192.168.1.196.38840 > 192.168.1.50.22211: Flags [S], cksum 0x527d (correct), seq 3440167578, win 32120, options [mss 1460,sackOK,TS val 3772353734 ecr 0,nop,wscale 7], length 0
21:01:48.350139 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
192.168.1.50.22211 > 192.168.1.196.38840: Flags [S.], cksum 0x3a60 (correct), seq 495600843, ack 3440167579, win 65160, options [mss 1460,sackOK,TS val 102903428 ecr 3772353734,nop,wscale 7], length 0
21:01:48.351892 IP (tos 0x0, ttl 64, id 59573, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.196.38840 > 192.168.1.50.22211: Flags [.], cksum 0x66b7 (correct), seq 1, ack 1, win 251, options [nop,nop,TS val 3772353737 ecr 102903428], length 0
21:01:50.698846 IP (tos 0x0, ttl 64, id 59574, offset 0, flags [DF], proto TCP (6), length 55)
192.168.1.196.38840 > 192.168.1.50.22211: Flags [P.], cksum 0xf275 (correct), seq 1:4, ack 1, win 251, options [nop,nop,TS val 3772356082 ecr 102903428], length 3
ただし、ローカルネットワークの外部で Telnet 形式を試しても、何らかの理由で接続は確立されません。長い間私は私のポート転送設定がオフになっていると確信していました(たとえ同じルータが別のポートをローカルネットワーク上の別のコンピュータに転送するのは大丈夫で、基本的に設定を別のポートにミラーリングしましたが)tcpdump
。下のログでは、パケットがインターフェイスに到着しますenp1s0
。
$ sudo tcpdump -pnvvi enp1s0 port 22211
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
20:58:05.448829 IP (tos 0x0, ttl 50, id 0, offset 0, flags [DF], proto TCP (6), length 64)
126.33.109.168.9875 > 192.168.1.50.22211: Flags [S], cksum 0x4448 (correct), seq 2086171535, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 560510789 ecr 0,sackOK,eol], length 0
20:58:06.593532 IP (tos 0x0, ttl 50, id 0, offset 0, flags [DF], proto TCP (6), length 64)
126.33.109.168.9875 > 192.168.1.50.22211: Flags [S], cksum 0x405f (correct), seq 2086171535, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 560511790 ecr 0,sackOK,eol], length 0
20:58:07.613818 IP (tos 0x0, ttl 50, id 0, offset 0, flags [DF], proto TCP (6), length 64)
126.33.109.168.9875 > 192.168.1.50.22211: Flags [S], cksum 0x3c76 (correct), seq 2086171535, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 560512791 ecr 0,sackOK,eol], length 0
20:58:08.603603 IP (tos 0x0, ttl 50, id 0, offset 0, flags [DF], proto TCP (6), length 64)
126.33.109.168.9875 > 192.168.1.50.22211: Flags [S], cksum 0x388c (correct), seq 2086171535, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 560513793 ecr 0,sackOK,eol], length 0
20:58:09.563590 IP (tos 0x0, ttl 50, id 0, offset 0, flags [DF], proto TCP (6), length 64)
126.33.109.168.36371 > 192.168.1.50.22211: Flags [S], cksum 0xcd21 (correct), seq 2086171535, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 560514795 ecr 0,sackOK,eol], length 0
また、netcatがすべてのインターフェイス(0.0.0.0部分)を受信していることがわかります。
$ sudo ss -tulpn | grep 22211
tcp LISTEN 0 1 0.0.0.0:22211 0.0.0.0:* users:(("nc",pid=3344,fd=3))
ルーティングテーブルは次のとおりです。
$ sudo route -vn
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 enp1s0
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp1s0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp1s0
192.168.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 enp1s0
したがって、なぜ外部ネットワークのパケットがポート22211のローカルソケットに到達できないのかわかりません。設定する必要がある追加のファイアウォール設定はありますか?
編集:興味深いことに、タイムアウトが発生しますping 8.8.8.8
(たとえば、google.comをpingすると正常に機能します)。
答え1
長い話を短く
複雑なものが機能しない場合は、まず基本が機能していることを確認してください。
拡張バージョン
ヘッダー
これは質問する方法を示す良い例です。
たとえば、Ubuntu 22.04を実行していて、システムに2つのイーサネットインターフェイスがあるなどの背景情報があります。
IP構成情報などの詳細情報を提供します。
動作例と動作しない例が表示されます。
デバッグの問題。
誤解を修正してください。
OPは「それで、外部ネットワークのパケットがポート22211のローカルソケットに到着しない理由がわからない」と述べた。データにパケットが到着したことが示されている場合、そのインターフェイスから応答は送信されません。
OPは2つのインターフェースがあると述べた。 IP情報には2番目のインターフェイスがダウンしているとマークされていますが、システムが他のインターフェイスからの応答を期待しているのでしょうか。
詳細についてはまずリクエストしてください。
「パステーブルに、126.33.189.168へのパスがupインターフェイス(enp1s0)を介してマークされていますか?」 OPはルートテーブルを追加し、次のように応答しました。
「元のメッセージにルーティングテーブル情報を追加しました。また、他のインターフェイスeno1がダウンしていることが確認されましたが、変更されていないようです。」
追加情報の 2 番目の要求です。
ルーティングテーブルには、数値アドレスではなくシンボル名があります。マッピングがわからない場合はあまり役に立ちません。
- 「数値を表示するように出力を表示するように編集内容を変更できますか
sudo route -vn
?」
回答者が自然に答える方法で質問します。
一部のコメントでは、代わりにip route
使用することをお勧めしますroute -vn
。私は長年このツールを使用してきましたが、ip route
これはより良いツールだと主張しています。尋ねなければならない質問は、「私たちはOPに良いツールを教えるように努力していますか、それとも彼が問題を解決するのを手伝っていますか?」です。新しいツールを導入することが邪魔になると思います。
2番目の追加情報のリクエスト - 続行してください。
「192.168.1.50から8.8.8.8などのよく知られているアドレスをpingできることを確認してください。」
「あなたは正しいです。何らかの理由でping 8.8.8.8が失敗しますが、google.com pingはうまくいきます。」
ping google.com
デバッグが機能する理由
- 「ping google.comはどのIPアドレスを選択しますか?(最初の行に表示されています。)IPv4から離れるように設定したようですが、IPv6はまだ機能しています。」
私はその言葉を使用しませんfirewalled
。ルーティングテーブルには、異なるメトリックを含む2つのデフォルトルートが表示されるため、これはほぼ確実にルーティングの問題です。
詳細情報を要求する 3 番目の要求です。
ほとんどの人はインターネット接続が1つだけですが、根拠のない仮定をしないようにしてください。
- 「それぞれインターネットにアクセスできる2つのルータを持ちたいですか(おそらく2つの異なるISPから提供されます)?」
答えが「いいえ」の場合、OPにルーティングの問題を解決するように指示すると(慣れたコマンドを使用して)、すべてが正常に機能します。回答を見積もり、質問とともに指示を提示することで、遅延を減らすことができます。
- 「8.8.8.8をpingできることが最も重要な問題です。この問題を解決すると、すべてが解決される可能性が高くなります。」
実際の問題。
ローカルネットワークの代わりにインターネットにパケットを送信する必要がある場合は、存在しないマシンを介して送信するように指示されます。
存在しないシステムにパケットを送信するために、ホストはARPパケットを送信していますが、応答を受信しません。
最終的に、ホストは存在しないシステムへの接続試行を放棄し、pingコマンドにエラーを報告したり、着信接続に承認を送信したりしません。
正しいアドレスを介してインターネットにパケットを送信するようにルーティングテーブルを変更すると、すべてが機能します。