Armadilloフォーラム

コンテナに作成したTCPサーバでデータを受信したい

new_bee

2024年6月6日 10時19分

いつもお世話になっております

以下の続きのなります。
https://armadillo.atmark-techno.com/forum/armadillo/20491
表題と大きく変わってしまったため立て直させていただきました。

armadillo内でUSBLANポートで拡張したLANにロガーを接続し、TCP/IPでデータを取得したいと考えております。
コンテナ内にTCPサーバを立て受信したデータをAWS上に送信しようと考えています。

拡張したLANは192.168.10.255でセットアップしているためロガーの送信先を同じにしております。
コンテナ内からロガーへのpingは通っているため、接続は問題なくできていると思います。
またロガーはsocketdebugerで電文が問題なく送信されていることを確認しています。
コンテナから電文を取得するにはどうすればよいのでしょうか?

armadilloでのip route の実行結果は以下になります。
armadillo:~# ip route
default via 192.168.5.3 dev eth0 metric 100
default via 192.168.10.1 dev eth1 metric 101
10.88.0.0/16 dev podman0 scope link src 10.88.0.1
192.168.4.0/22 dev eth0 scope link src 192.168.7.96 metric 100
192.168.10.0/24 dev eth1 scope link src 192.168.10.255 metric 101
コンテナのipは以下になります
inet 10.88.0.9/16 brd 10.88.255.255 scope global eth0

なにとぞよろしくお願いいたします。

コメント

at_makoto.sato

2024年6月6日 18時31分

佐藤です。

何点か確認させてください。
> 拡張したLANは192.168.10.255でセットアップしているためロガーの送信先を同じにしております。
「送信先を同じにしている」とは何と同じにしているのでしょうか。

> コンテナから電文を取得するにはどうすればよいのでしょうか?
コンテナから電文を取得するプログラムを作成したがそれがうまく動かず原因がわからないということでしょうか。
それとも、そもそも電文を取得するためにはどのようなプログラムを作ればよいのか分からにということでしょうか。

より詳細なネットワーク構成やコンテナ構成を教えていただけると適切なアドバイスができるかと思います。

new_bee

2024年6月7日 9時00分

佐藤さま

お世話になっております

> 「送信先を同じにしている」とは何と同じにしているのでしょうか。
ロガーの送信先を192.168.10.255にしております。

> コンテナから電文を取得するプログラムを作成したがそれがうまく動かず原因がわからないということでしょうか。
こちらになります。
コンテナではない環境で、TCPサーバを立ててロガーから電文を受信することはできています。
コンテナから192.168.10.255を指定することができないためホスト側のアドレスを使うにはどうすればいいかの状態で止まっています。
TCPサーバを立てようとしている
コンテナ側は
eth0@if7: mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 6e:2f:ef:6f:78:9b brd ff:ff:ff:ff:ff:ff
inet 10.88.0.3/16 brd 10.88.255.255 scope global eth0
armadillo側では

armadillo:~# ip route
default via 192.168.5.3 dev eth0 metric 100
default via 192.168.10.1 dev eth1 metric 101
10.88.0.0/16 dev podman0 scope link src 10.88.0.1
192.168.4.0/22 dev eth0 scope link src 192.168.7.96 metric 100
192.168.10.0/24 dev eth1 scope link src 192.168.10.255 metric 101

192.168.7.96をカメラ接続につかっており、
192.168.10.255をロガー接続につかっています。

最終的にはSIM接続し、ロガーとカメラ画像をAWSに送信することを考えております

よろしくお願いいたします

> 佐藤です。
>
> 何点か確認させてください。
> > 拡張したLANは192.168.10.255でセットアップしているためロガーの送信先を同じにしております。
> 「送信先を同じにしている」とは何と同じにしているのでしょうか。
>
> > コンテナから電文を取得するにはどうすればよいのでしょうか?
> コンテナから電文を取得するプログラムを作成したがそれがうまく動かず原因がわからないということでしょうか。
> それとも、そもそも電文を取得するためにはどのようなプログラムを作ればよいのか分からにということでしょうか。
>
> より詳細なネットワーク構成やコンテナ構成を教えていただけると適切なアドバイスができるかと思います。
>

at_reika.yamazaki

2024年6月7日 10時52分

お世話になっております。
山崎です。

>コンテナではない環境で、TCPサーバを立ててロガーから電文を受信することはできています。
>コンテナから192.168.10.255を指定することができないためホスト側のアドレスを使うにはどうすればいいかの状態で止まっています。

コンテナ外ではできているようなので、コンテナに TCP ポート番号のポートフォワードがされていない可能性があります。
コンテナの設定ファイルに "add_ports 80:80/tcp" (80 の部分はお使いのポート番号を指定してください。)のように記載することで、
コンテナに渡すことができます。
ポート番号が不明な場合は、ひとまず、コンテナの設定ファイルに "set_network host" を追加することで、
ホスト側のネットワークをすべてコンテナに渡すことが可能です。
上記で改善されるか、お確かめいただけますと幸いです。

以上、どうぞよろしくお願いいたします。

new_bee

2024年6月7日 14時42分

山崎様

お世話になっております。

set_network hostを追加することで
ip 192.168.10.255 port 1000からデータを取得することができました。

また
add_ports 1000 :1000/tcp
のみを追加したところ

以下コードでsocket作成の部分で以下エラーが発生します。
SERVER_IP = '192.168.10.255'
SERVER_PORT = 1000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((SERVER_IP, SERVER_PORT))   
s.listen()

Traceback (most recent call last):
File "/vol_app/src/tcpsever.py", line 10, in
s.bind((SERVER_IP, SERVER_PORT))
OSError: [Errno 99] Address not available

192.168.10.255 を使用するには別途設定追加する必要があるのか
ポートの許可が足りないのでしょうか?

よろしくお願いいたします

> お世話になっております。
> 山崎です。
>
> >コンテナではない環境で、TCPサーバを立ててロガーから電文を受信することはできています。
> >コンテナから192.168.10.255を指定することができないためホスト側のアドレスを使うにはどうすればいいかの状態で止まっています。
>
> コンテナ外ではできているようなので、コンテナに TCP ポート番号のポートフォワードがされていない可能性があります。
> コンテナの設定ファイルに "add_ports 80:80/tcp" (80 の部分はお使いのポート番号を指定してください。)のように記載することで、
> コンテナに渡すことができます。
> ポート番号が不明な場合は、ひとまず、コンテナの設定ファイルに "set_network host" を追加することで、
> ホスト側のネットワークをすべてコンテナに渡すことが可能です。
> 上記で改善されるか、お確かめいただけますと幸いです。
>
> 以上、どうぞよろしくお願いいたします。

at_reika.yamazaki

2024年6月7日 16時04分

お世話になっております。
山崎です。

2点確認したいです。
1点目、お貼りいただいた "add_ports 1000 :1000/tcp" ですが、 `:` の前に不要なスペースがあるようです。
そのためポート設定が正しくできているかご確認をお願いします。
コンテナを再起動後 "podman ps -a" を実行したときに、
PORTS の個所が "0.0.0.0:1000->1000/tcp" になっていれば正しく設定されています。

2点目、SERVER_IP の部分をコンテナ内で取得した IP アドレスに設定してみてください。
これまでの情報から、"10.88.0.x" になるかと思います。
念のため "ip addr" コマンド等を実行して確認した IP アドレスを与えてください。

以上、お確かめいただけますと幸いです。
どうぞよろしくお願いいたします。

new_bee

2024年6月7日 16時30分

山崎様
お世話になっております

> PORTS の個所が "0.0.0.0:1000->1000/tcp" になっていれば正しく設定されています。
こちらは問題なく設定できていました。

> これまでの情報から、"10.88.0.x" になるかと思います。
サーバを立てる際にホストのアドレスの192.168で指定していたためデータの受信ができていませんでした。
10.88.0.xに変更し問題なくデータの受信ができるようになりました。

ありがとうございました

> お世話になっております。
> 山崎です。
>
> 2点確認したいです。
> 1点目、お貼りいただいた "add_ports 1000 :1000/tcp" ですが、 `:` の前に不要なスペースがあるようです。
> そのためポート設定が正しくできているかご確認をお願いします。
> コンテナを再起動後 "podman ps -a" を実行したときに、
> PORTS の個所が "0.0.0.0:1000->1000/tcp" になっていれば正しく設定されています。
>
> 2点目、SERVER_IP の部分をコンテナ内で取得した IP アドレスに設定してみてください。
> これまでの情報から、"10.88.0.x" になるかと思います。
> 念のため "ip addr" コマンド等を実行して確認した IP アドレスを与えてください。
>
> 以上、お確かめいただけますと幸いです。
> どうぞよろしくお願いいたします。