Armadilloフォーラム

soracom canal+vpg AWS側DNSサーバーにアクセスする方法

amano

2020年1月17日 20時42分

soracom simからAWS側のPrivate IP(http://172.XX.XX.234)ではAPIレスポンス返ってきますが、ドメイン名url(http://xxxxxx)では返ってきません。

ドメイン名でAPIレスポンスが返ってくるようにする方法を教えてください。

armadillo(192.168.15.100)-soracom sim側VPC(10.128.XX.XX)-AWS側VPC DNSサーバー(172.XX.XX.2)の構成になっております。

現状の設定等を記載します。

root@armadillo:~# ifconfig
eth0: flags=4099 mtu 1500
ether 00:11:0c:20:01:61 txqueuelen 1000 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (ローカルループバック)
RX packets 328 bytes 26232 (25.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 328 bytes 26232 (25.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

usb1: flags=4163 mtu 1500
inet 192.168.15.100 netmask 255.255.255.0 broadcast 192.168.15.255
inet6 fe80::e13a:895b:5f9e:23b5 prefixlen 64 scopeid 0x20
ether 02:80:70:08:07:00 txqueuelen 1000 (イーサネット)
RX packets 85 bytes 10062 (9.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 232 bytes 23598 (23.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4099 mtu 1500
ether 38:d2:69:df:9f:93 txqueuelen 1000 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


root@armadillo:~# cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 192.168.15.1


root@armadillo:~# cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no


root@armadillo:~# cat /etc/NetworkManager/system-connections/sora
[connection]
id=sora
uuid=6e85f6e6-1234-4893-957b-4d803c6bd539
type=gsm
interface-name=ttyACM0
permissions=
timestamp=1579256927

[gsm]
apn=soracom.io
number=*99#
password=sora
username=sora

[ipv4]
dns=192.168.15.1;
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

※dns=192.168.15.1;は設定してもしなくてもレスポンスありませんでした。

その他dns=DNSサーバー(172.XX.XX.2)にしてみたり、固定IP設定してみたりしましたが、
以下のエラー内容になってしまいます。

エラー内容

HTTPConnectionPool(host='XXXXXXXXXXX', port=80): Max retries exceeded with url: /api/v1/pma/healthstatus (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -5] No address associated with hostname',))


コメント

at_koseki

2020年1月27日 13時33分

古関です。

問題切り分けのためにArmadillo-IoT側で以下のコマンドを実行し結果をいただけますでしょうか?
# nslookup google.com
# nslookup http://xxxxxx
# route

もし差し支えなければ教えていただきたいのですが、
soracom sim VPC と AWS VPCの接続はどのように行っているのでしょうか。
SORACOM Canalを利用している状況でしょうか。

amano

2020年1月27日 17時02分

以下にコマンド実行結果を記載します。

root@armadillo:~# nslookup google.com
Server: 192.168.15.1
Address: 192.168.15.1#53

Non-authoritative answer:
Name: google.com
Address: 172.217.26.46

alot@armadillo:~# nslookup http://xxxxxx
Server: 192.168.15.1
Address: 192.168.15.1#53

** server can't find http://xxxxxx: NXDOMAIN

root@armadillo:~# random: crng init done
route
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default OpenWrt.lan 0.0.0.0 UG 700 0 0 usb1
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 usb1
192.168.15.0 0.0.0.0 255.255.255.0 U 700 0 0 usb1
root@armadillo:~#

>soracom sim VPC と AWS VPCの接続はどのように行っているのでしょうか。
>SORACOM Canalを利用している状況でしょうか。
→はい、Canalを利用しております。

at_koseki

2020年1月27日 17時25分

古関です。

ご確認ありがとうございます。

google.comの名前は引けている状況ですが、AWS側VPCの方の名前が引けていないですね。

AWS側やSORACOM Canal側にどのような設定を実施したでしょうか?

Canalは私も評価したことが無いのですが、
下記の情報は参考にならないでしょうか。

※ 既知の情報だったら申し訳ありません

https://blog.soracom.jp/blog/2019/09/05/isolated-access-to-aws/
※「プライベートDNS」部分

https://dev.classmethod.jp/soracom/serve-managed-dns-to-soracom-air/

at_koseki

2020年1月27日 18時00分

古関です。

> alot@armadillo:~# nslookup http://xxxxxx
> Server: 192.168.15.1
> Address: 192.168.15.1#53
>
> ** server can't find http://xxxxxx: NXDOMAIN

ごめんなさい。一点再確認おねがいします。

nslookupは"http"を入れて実行できないようです。
以下のように再度コマンドを入力・結果をいただけますか?

# nslookup xxxxxx
※"xxxxx"にはAWS VPC側のドメイン名を"http://"を付けないで入力してください。

amano

2020年1月27日 19時12分

> ごめんなさい。一点再確認おねがいします。
>
> nslookupは"http"を入れて実行できないようです。
> 以下のように再度コマンドを入力・結果をいただけますか?
>
> # nslookup xxxxxx
> ※"xxxxx"にはAWS VPC側のドメイン名を"http://"を付けないで入力してください。
>
上記確認しました。

root@armadillo:~# nslookup xxxxxx
Server: 192.168.15.1
Address: 192.168.15.1#53

Non-authoritative answer:
*** Can't find xxxxxx: No answer

root@armadillo:~# nslookup beam.soracom.io
Server: 192.168.15.1
Address: 192.168.15.1#53

Non-authoritative answer:
Name: beam.soracom.io
Address: 100.127.127.100

root@armadillo:~#

※beam.soracom.ioは参考までに打ってみました。(soracom beamを利用しているわけではありません)
nslookup beam.soracom.ioの結果と同じような結果を期待しております。

at_koseki

2020年1月27日 20時24分

古関です。

やはり、インターネット側の名前は引けていて
AWS側VPCの方の名前が引けていない状況です。

> AWS側やSORACOM Canal側にどのような設定を実施したでしょうか?
こちらはどのような状況でしょうか?

> https://dev.classmethod.jp/soracom/serve-managed-dns-to-soracom-air/
「SORACOM CanalおよびカスタムDNSのセットアップ」を見ると
ソラコムユーザーコンソール側にカスタムのDNSを追加すれば
Armadillo側の設定はAPN/user/passwordのみ設定し、
LTEのデータ接続をすれば、他は何も気にしなくても良いように見えます。
こちらは既に確認・設定済みでしょうか。

akio_tsuchiya

2020年1月28日 9時28分

一点気になる点があります。

SORACOM Canalは、AWSのアクセスポイントまでのピアーツーピアサービスではないでしょうか?

次に、AWSの内側は、通常、Rute53が必須と考えます。
ちょっと前までは、EC2等のコンピュートサービスが常時動いていた時は、このコンピュートサービスに、
DNSまがいの事をさせることができました。

現在は、Lambdaを派生とするイベント処理型のコンピュートサービスに移行した場合、
AWS内部のDNSを肩代わりするサービスが必須となると思います。

> 古関です。
>
> やはり、インターネット側の名前は引けていて
> AWS側VPCの方の名前が引けていない状況です。
>
> > AWS側やSORACOM Canal側にどのような設定を実施したでしょうか?
> こちらはどのような状況でしょうか?
>
> > https://dev.classmethod.jp/soracom/serve-managed-dns-to-soracom-air/
> 「SORACOM CanalおよびカスタムDNSのセットアップ」を見ると
> ソラコムユーザーコンソール側にカスタムのDNSを追加すれば
> Armadillo側の設定はAPN/user/passwordのみ設定し、
> LTEのデータ接続をすれば、他は何も気にしなくても良いように見えます。
> こちらは既に確認・設定済みでしょうか。

amano

2020年1月28日 10時25分

「Amazon Route 53 Private Hosted Zone」と「Route 53 Resolver」は現在未設定です。
新たに設定、確認でき次第、ご連絡いたします。

amano

2020年1月28日 12時21分

設定し、確認しましたが、名前解決できませんでした。結果を記載します。

root@armadillo:~# cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 192.168.15.1
root@armadillo:~# nslookup carwash.mk.internal
Server: 192.168.15.1
Address: 192.168.15.1#53

Non-authoritative answer:
*** Can't find carwash.mk.internal: No answer

root@armadillo:~# route
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default OpenWrt.lan 0.0.0.0 UG 700 0 0 usb1
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 usb1
192.168.15.0 0.0.0.0 255.255.255.0 U 700 0 0 usb1
root@armadillo:~# nslookup google.com
Server: 192.168.15.1
Address: 192.168.15.1#53

Non-authoritative answer:
Name: google.com
Address: 172.217.26.14

root@armadillo:~#

ちなみに
raspberry Pi Zero + モバイルルータ(AtermMR03 NEC製)
では名前解決できました。
raspiの結果やsoracom関連の設定を添付します。

ファイル ファイルの説明
添付.zip

akio_tsuchiya

2020年1月28日 15時10分

先程、Rute53を提案した土屋と申します。
申し訳ありません。
先程までの状況から、AWS内部の情報が取得できていないだけの単純な内容と思っておりましたが、
私の思いとは、大きく違うようでした。
誠に、申し訳ありません。

> 設定し、確認しましたが、名前解決できませんでした。結果を記載します。
>
> root@armadillo:~# cat /etc/resolv.conf
> # Generated by NetworkManager
> search lan
> nameserver 192.168.15.1
> root@armadillo:~# nslookup carwash.mk.internal
> Server: 192.168.15.1
> Address: 192.168.15.1#53
>
> Non-authoritative answer:
> *** Can't find carwash.mk.internal: No answer
>
> root@armadillo:~# route
> カーネルIP経路テーブル
> 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
> default OpenWrt.lan 0.0.0.0 UG 700 0 0 usb1
> link-local 0.0.0.0 255.255.0.0 U 1000 0 0 usb1
> 192.168.15.0 0.0.0.0 255.255.255.0 U 700 0 0 usb1
> root@armadillo:~# nslookup google.com
> Server: 192.168.15.1
> Address: 192.168.15.1#53
>
> Non-authoritative answer:
> Name: google.com
> Address: 172.217.26.14
>
> root@armadillo:~#
>

>
> ちなみに
> raspberry Pi Zero + モバイルルータ(AtermMR03 NEC製)
> では名前解決できました。
> raspiの結果やsoracom関連の設定を添付します。
>

amano

2020年1月29日 17時11分

状況的には以下となります。
①G3L
1,Route53に設定したドメイン(carwash.mk.internal):NG
2,固定IP:OK
3,Priavte DNS(xxxxxx.amazonaws.com):NG
(4,soracom.io:OK)

②raspi
1,Route53に設定したドメイン:OK
2,固定IP:OK
3,Priavte DNS:OK

運用で利用したいのは①-1です。
Rute53についてはnslookup google.comの名前解決に必要でしたので、引き続き利用致します。

1点気になる点がございます。

root@armadillo:~# cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 192.168.15.1
root@armadillo:~#


search lan

②raspiのresolv.confには"search lan"の記載がありませんでした。
今回の症状と関係ありますでしょうか。
また、削除する方法はありますでしょうか。

よろしくお願い致します。

amano

2020年2月7日 17時58分

すみません。一応名前解決は出来ました。
しかし他の問題が発生しました。

・名前解決について
以下を変更しました。

root@armadillo:~# nano /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
dns=none

dns=noneを追加


root@armadillo:~# nano /etc/resolv.conf
nameserver 172.16.XX.XX
nameserver 192.168.15.1

nameserver 172.16.XX.XX(Route 53 Inbound Resolverのアドレス)

ご迷惑お掛けしました。

・新たな問題
上記ファイルを盛り込んでルートファイルシステムを作成しようと思い、
x1-debian-builder(v2.1.1)で実行するとエラーが発生し、途中で終わってしまいます。

何か解決方法はありますでしょうか。
エラーが発生したときのATDEのコンソールを添付します。
resolv.confを削除すると正常に実行されます。

よろしくお願い致します。

ファイル ファイルの説明
エラー時.txt エラーが発生したときのATDEのコンソール

at_koseki

2020年2月10日 20時16分

古関です。

> root@armadillo:~# nano /etc/NetworkManager/NetworkManager.conf
> dns=noneを追加
>
> root@armadillo:~# nano /etc/resolv.conf
> nameserver 172.16.XX.XX
> nameserver 192.168.15.1
x1-debian-builderはATDE(x86上)でArmのエミュレータ(qemu-user-static)を動かし、
aptでArm版 debianパッケージをインストールする仕組みになってます。

aptによるインストール実行前に、/etc/resolv.confを書き換えてしまい、qemu debianから、
aptサーバーの名前解決ができなくなり、aptのインストールができないのかもしれません。

x1-debian-builderでの/etc/resolv.conf の変更はどのようにして行っているでしょうか?
apt-getが実施されるより前に、resolve.confを書き換えると、インストールに失敗すると思います。
aiotg3l_resources/resources/fixup の最終行にcpする形で入れるとできそうです。

別案としては、次のようにコネクション設定を作成してはいかがでしょうか?

nmcli connection add type gsm ifname ttyACM0 apn soracom.io user sora password sora ipv4.ignore-auto-dns yes ipv4.dns "172.16.XX.XX,192.168.15.1"

amano

2020年2月12日 12時09分

ご回答ありがとうございます。
解決しました。

最終的には以下でインストールに成功しました。
aiotg3l_resources/resources/NetworkManager.conf

[main]
plugins=ifupdown,keyfile
#dns=none

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

aiotg3l_resources/etc/NetworkManager/system-connections/sora

[ipv4]
dns=172.16.XX.XX;
dns-search=
ignore-auto-dns=true
method=auto

ありがとうございました。

amano

2020年2月25日 20時27分

再び名前解決できなくなりました。前回とは少し状況が異なります。

AWS側再構築によりurlが変更になり疎通確認を行ったところ、レスポンスが返ってこなくなりました。
Route53やカスタムDNSは新しい設定に変更しました。

【Route53 PrivateArias】 http://XXXXX.XX.develop.local/api/v1/pma/healthstatus
エラーが発生しました
HTTPConnectionPool(host='XXXXX.XX.develop.local', port=80): Max retries exceeded with url: /api/v1/pma/healthstatus (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',))
【固定IP】 http://172.16.aa.aa/api/v1/pma/healthstatus
200
{'operation_stopped_flag': 0, 'health_stopped_flag': 0, 'paymachine_cd': '50001'}

上記はpython3でrequestsした結果です。
固定IPは期待通りのレスポンスが返ってきております。

【前回の状況とは異なる点】
nslookupでは正常な応答が返ってきている点

root@armadillo:~# nslookup XXXXX.XX.develop.local
Server: 172.16.aa.cc
Address: 172.16.aa.cc#53

Non-authoritative answer:
Name: XXXXX.XX.develop.local
Address: 172.16.aa.aa
Name: XXXXX.XX.develop.local
Address: 172.16.bb.bb

root@armadillo:~#

前回の問題解決前はnslookupで名前解決できませんでした。(XXXXX.test.internal)

何か解決策ありますでしょうか。