Ubuntu でAndroidとGSConnectが接続できない場合の対処法

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が原因で接続できていない場合はこれで解消するはず。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です