AndroidのスマホとでストップPCはGSConnectでつながるのに、AndroidのスマホとノートPCはつながらない。という現象が起きていた。
原因はノートPC側でUDPポート1716がブロックされていたから。
ufwで1716/udpを開放してあげたら使えるようになった話。
Ubuntu側の動作を確認する
GSConnectの通信はできてるかい?
まずはどんな通信が発生しているか見てみる。
GSConnectは1716ポートでリスニングしているので、お互いのリスニングポートをtcpdumpで監視する。この状態でスマートフォン側からノートPCに接続してみる。
ノートPC側でパケットキャプチャーを取得する(tcpdump)
まずは以下のコマンドを実行してキャプチャーの取得を開始する
$ sudo tcpdump -A port 1716
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wlp2s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
まだ何も通信していないので上記の画面で止まるはず。
スマホからノートPCにつないでみる
スマホのKDEConnectのメニューから「新しいデバイスをペアリング」を選択し、右上のメニューアイコンから「IPアドレスでデバイスを追加」を選択する。
次にノートPCのIPアドレスを入力して接続を開始する。
するとノートPC側で以下のログが出るはず。
02:43:52.270851 IP 192.168.0.14.1716 > notepc.1716 : UDP, length 1780
E..... .@..................
(略)
02:43:52.407048 IP 192.168.0.14.37710 > notepc.1716: Flags [S], seq 377992621, win 65535, options [mss 1460,sackOK,TS val 4134609789 ecr 0,nop,wscale 9], length 0
E..<Z.@.@._K.........N..............Fg.........
.q#}.......
02:43:53.500064 IP 192.168.0.14.37710 > notepc.1716: Flags [S], seq 377992621, win 65535, options [mss 1460,sackOK,TS val 4134610809 ecr 0,nop,wscale 9], length 0
E..<Z.@.@._J.........N..............Bk.........
.q'y.......
02:43:55.488143 IP 192.168.0.14.37710 > notepc.1716: Flags [S], seq 377992621, win 65535, options [mss 1460,sackOK,TS val 4134612825 ecr 0,nop,wscale 9], length 0
E..<Z.@.@._I.........N..............:..........
.q/Y.......
02:43:59.749992 IP 192.168.0.14.37710 > notepc.1716: Flags [S], seq 377992621, win 65535, options [mss 1460,sackOK,TS val 4134617049 ecr 0,nop,wscale 9], length 0
E..<Z.@.@._H.........N..............*..........
.q?........
02:44:07.872071 IP 192.168.0.14.37710 > notepc.1716: Flags [S], seq 377992621, win 65535, options [mss 1460,sackOK,TS val 4134625241 ecr 0,nop,wscale 9], length 0
E..<Z.@.@._G.........N..............
..........
.q_........
192.168.0.14がスマホなのだが、一生懸命スマホからnotepcにUDPで話しかけているのにノートPCは全然反応していないのがわかる。
これは典型的なUDPポートのブロック状態。
ufw(ファイアーウォール)の状態を確認してみよう
まずはノートPCのUDPポートの状態を確認してみる。
$ sudo ss -lunp | grep 1716
UNCONN 0 0 *:1716 *:* users:(("gjs",pid=4104,fd=19))
上記の通り、UNCONN(コネクションを作成できない状態)になっていることがわかる。
ポートスキャンもしてみよう。ノートpcのIPアドレスが192.168.0.18の場合は以下のコマンドを実行する。
$ sudo nmap -p 1716 -sU 192.168.0.18
PORT STATE SERVICE
1716/udp open|filtered xmsg
UDPポートはOpenだが何もステータスを返さない(filtered)状態になっている。
ファイアーウォールの状態を確認すると別セグメント(192.168.122.205)からの接続しか許可されていないことがわかる。
$ sudo ufw status
To Action From
-- ------ ----
Anywhere ALLOW 192.168.122.205
やるべきことはわかった。UDP 1716への通信を許可してあげる。
以下のコマンドでufwの設定を変更し、同じセグメントからのudp 1716を許可してあげればよい
$ sudo ufw allow from 192.168.0.0/24 to 192.168.0.0/24 port 1716 proto udp
$ sudo ufw status
To Action From
-- ------ ----
Anywhere ALLOW 192.168.122.205
192.168.0.0/24 1716/udp ALLOW 192.168.0.0/24
UFWが原因で接続できていない場合はこれで解消するはず。