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<UP,BROADCAST,MULTICAST>  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<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
        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<UP,BROADCAST,MULTICAST>  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('<urllib3.connection.HTTPConnection object at 0x763b5270>: Failed to establish a new connection: [Errno -5] No address associated with hostname',))
コメント

古関です。

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

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

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

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を利用しております。

古関です。

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

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/

古関です。

> 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://"を付けないで入力してください。

> ごめんなさい。一点再確認おねがいします。
>
> 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の結果と同じような結果を期待しております。

古関です。

やはり、インターネット側の名前は引けていて
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のデータ接続をすれば、他は何も気にしなくても良いように見えます。
こちらは既に確認・設定済みでしょうか。

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

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のデータ接続をすれば、他は何も気にしなくても良いように見えます。
> こちらは既に確認・設定済みでしょうか。

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

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

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

先程、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関連の設定を添付します。
>

状況的には以下となります。
①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"の記載がありませんでした。
今回の症状と関係ありますでしょうか。
また、削除する方法はありますでしょうか。

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

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

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

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のコンソール

古関です。

> 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"

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

最終的には以下でインストールに成功しました。
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

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

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

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('<urllib3.connection.HTTPConnection object at 0x764f2e90>: 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)

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