Armadilloフォーラム

有線LANのIP固定とsimでのインターネット通信の併用について

kumikoohashi

2018年9月4日 9時56分

お世話になっております。大橋です。

続けての投稿で申し訳ありません。
色々なものを見ながらネットワークの設定をしているのですが、やりたいことが全部実現できずにいます。
インフラに詳しくなくてすみません。

ネットワークA:the0で、機器との接続(すべて固定IP)
ネットワークB:ppp0で、インターネット接続。固定IPではないが、定期的にIPアドレスをサーバーに送るプログラムが稼働中。

やりたいのに実現できていないこと
・ネットワークA内の機器を、G3経由でインターネットに接続する
 DHCPのパターンはこちらのサイトに詳しく載っていたのですが、固定のときは何をすればいいのかがわかりませんでした。
・インターネット経由でG3にSSH接続する
 eth0を使わない構成では実現できています。

すでに行った設定
1.nmcliで、simを追加、ppp0接続を作成
 G3のマニュアルを参考にしました。
 インターネットにpingが通じることを確認。
2.SSHサーバーのインストールと起動
 ネットワークAなしで動作しているG3と同じ設定(パスワード必須/ルートログイン禁止)です。
 ネットワークB内に繋いだPCからの接続で動作を確認しています。
3.nmtuiで、IP:111.111.0.1、サブネットマスク:255.255.0.0に固定
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_sta… こちらを参考にしました。
 B内でpingが通ることを確認。
4.デフォルトゲートウェイをdev ppp0にする
 G3からA内の機器と、インターネットの両方にpingが通ることを確認。
 デバイスのみの指定で、IPなどは指定していません。
5.A内の機器のデフォルトゲートウェイに、G3のIPを登録
6./etc/sysctl.conf を、 net.ipv4.ip_forward = 1 に
 5までで繋がらなかったので、試しにやってみただけです。

他にどんな設定が必要なのでしょうか。
よろしくお願い申し上げます。

コメント

中村です。

> ネットワークA:the0で、機器との接続(すべて固定IP)
> ネットワークB:ppp0で、インターネット接続。固定IPではないが、定期的にIPアドレスをサーバーに送るプログラムが稼働中。
>
> やりたいのに実現できていないこと
> ・ネットワークA内の機器を、G3経由でインターネットに接続する
>  DHCPのパターンはこちらのサイトに詳しく載っていたのですが、固定のときは何をすればいいのかがわかりませんでした。

NAT(IPマスカレード)の設定だと思います。
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptablesの設定の他に
> 6./etc/sysctl.conf を、 net.ipv4.ip_forward = 1 に
も必要ですが、設定ファイルを変更するのではなく、
コマンドラインから次のようにしてもOKです。
echo 1 > /proc/sys/net/ipv4/ip_forward

それから、eth0に接続した機器がDNSをひけるように、
AramdilloでDNSキャッシュサーバーを起動します。
dnsmasq

dnsmasqはDHCPサーバなど機能が豊富ですが、
DNSキャッシュサーバーとしてだけ使う場合は設定は不要です。
またdnsmasqは自分自身でデーモンになってくれます。

以上を手動で設定してOKならば、
この3つを/etc/rc.localあたりに記述すればいいでしょう。

> ・インターネット経由でG3にSSH接続する
>  eth0を使わない構成では実現できています。

eth0を使わないときに動いているならば、
ルーティングの設定などのような気がします。
> 4.デフォルトゲートウェイをdev ppp0にする
とのことですが、route -n などで再確認してください。

// グローバルIPのSIMを持っていないので、
// この部分は私には確認できません。

--
なかむら

中村様

お世話になっております。大橋です。

教えてくださってありがとうございます。

有線LAN内の機器からの接続について、
dnsmasqなど仕組みは後で学びますが、取り急ぎで教えていただいたコマンドを実行したところ機器がインターネットにつながったので、
起動時に実行するようにしたのですが、起動時にエラーのようなものが出てつながりませんでした。
(機器側は、DNSサーバーとデフォルトゲートウェイの両方に、アルマジロの有線IPをいれました。)
起動順に問題があるのでしょうか。

rc.local のexitのすぐ上に

service sshd start
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
dnsmasq

(exit)

他に
/etc/network/if-up.d/static-routes が起動時に実行されます。
/sbin/route del default dev eth0
/sbin/route add default dev ppp0

この状態で起動すると

random: crng init done
random: 7 urandom warning(s) missed due to ratelimiting

こういったエラー?が出て、機器からはインターネットにつながりません。
ルーティングは起動から少し時間がかかります。
手動でもう一度実行すると、sshdは起動済み、iptables、ip_forwardは完了しますが、dnsmasq は、すでにポートが使用中、のようなエラーがでます。
メッセージを検索したところ、何か大きな処理を行おうとして、エラーが出たのかなとは思い、dnsmasqだけ最後に&をつけて非同期にしてみましたが変わらず。
どう書けばエラーを出さずに自動実行できますか。

SSHはこの問題が解決してからだと感じています。

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

中村です。

何本かに分けて返事を書かせてもらいます。

> rc.local のexitのすぐ上に
>
> service sshd start

sshサーバを常に動かすのであれば、
起動した状態で手動で
systemctl enable ssh.service
1度を実行しておけば、次回の起動時には
自動でsshサーバが動いてくれます。

--
なかむら

中村です。

> 手動でもう一度実行すると、sshdは起動済み、iptables、ip_forwardは完了しますが、dnsmasq は、すでにポートが使用中、のようなエラーがでます。

sshdすでに動いてますし、
dnsmasqもすでに動いていますので、
このエラーがでるのが正常だと思います。

--
なかむら

中村です。

sshサーバは2つ前の投稿で書いた方法で自動起動するようになっているものとします。
3G(ppp0)は正常に設定ができているものとします。

> 他に
> /etc/network/if-up.d/static-routes が起動時に実行されます。
> /sbin/route del default dev eth0
> /sbin/route add default dev ppp0

これらの設定は「ない」ものとします。
(Armadillo-G3のデフォルトの状態のまま)

他にもネットワークに関連する設定の変更や追加があれば、
すべてデフォルト状態に戻してください。

起動した状態で1度だけ、次のコマンドを手動で実行します。
IPアドレスは適当に変更してください。

# nmcli connection add type ethernet ifname eth0
# nmcli connection modify ethernet-eth0 ipv4.method manual ipv4.addresses 192.168.0.100/24
# nmcli connection up ethernet-eth0

ifconfigとrouteコマンドの結果は次のようになるはずです。

# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::5091:8666:55d4:5f11  prefixlen 64  scopeid 0x20<link>
        ether 00:11:0c:1b:81:75  txqueuelen 1000  (Ethernet)
        RX packets 2317  bytes 256393 (250.3 KiB)
        RX errors 0  dropped 74  overruns 0  frame 0
        TX packets 221  bytes 24644 (24.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.141.135.222  0.0.0.0         UG    700    0        0 ppp0
10.141.135.222  0.0.0.0         255.255.255.255 UH    700    0        0 ppp0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

ifconfigでeth0のIPアドレスやネットマスク、それから、
routeでデフォルトゲートウェイがppp0になっていること
(eth0がデフォルトゲートウェイになっていないこと)などを
確認してください。

/etc/rc.localのexitの直前に次の3行を追加します。

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
dnsmasq

// eth0につながる機器がDNSを必要としていなければ
// (IPアドレスでだけでインターネットにアクセスするのならば)
// 3つ目のdnsmasqは不要です。

再起動します。

--
なかむら

古関です。

> ・インターネット経由でG3にSSH接続する
>  eth0を使わない構成では実現できています。
Network Managerの動作仕様で、3G/LTEとEthernetを同時に有効にした場合、
Ethernet側がデフォルトのルートとなっているのでは無いでしょうか。

以下のフォーラムが参考になると思います。
https://armadillo.atmark-techno.com/forum/armadillo/2907#comment-4824

古関様

お世話になっております。大橋です。

ご回答ありがごうございます。
すでにそちらの回答は検索して拝見していたのですが、恥ずかしながら、[有線LANのコネクション名] を、nmcli deviceやconnectionなど打った時の、どの項目を使えばいいのかわからずに、楽な書き方に逃げてしまいました。

今は、IPの書き方などの理解ができなくて、デバイス名だけで雑にルーティングを起動時に上書きしていています。

/etc/network/if-up.d/static-routes
 /sbin/route del default dev eth0
 /sbin/route add default dev ppp0

route -nの結果
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
0.0.0.0 255.255.0.0 0.0.0.0 UG 1024 0 0 eth0
 (delできていないがmetricでなんとかなっている気がするので放置)
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
 (これが機器との有線LANのネットワーク)
255.255.0.0 0.0.0.0 255.255.255.255 UH 1024 0 0 eth0

アルマジロ側からは有線で、デバイス側とインターネット側のどちらにもいくことができます。
しかし、上の中村様に教えていただいたようにも設定したのですが、LANケーブルを抜いてもppp側からは接続ができませんでした。
アルマジロはただのG3なので、G3Lと違ってファイヤーウォールの変更はいらないと認識しています。

ご案内いただいた書き方にすれば、状態は変わりますか。

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

(SSHについて追記です)
お世話になっております。大橋です。

インターネットからのSSHについては、VPSを中継にする方法が載っているのを見つけて、開発機で試してみました。

Armadillo-X1, Armadillo-IoT G3/G3L: 直接アクセスできないArmadilloにSSHで接続する方法
https://users.atmark-techno.com/blog/53/2896

(開発機ではsimが固定IPのためか、インターネットからでも直接SSHで繋がるのですが)
手動でコマンドを打って上の方法を試したところ、繋がりました。G3で、VPSへのssh接続を起動時に非同期で開始する方法のほうが、鍵の作成など含めても、難易度が低そうです。近日中に、現場にいって、非固定IPの本番機で試してみます。

中村です。

> Network Managerの動作仕様で、3G/LTEとEthernetを同時に有効にした場合、
> Ethernet側がデフォルトのルートとなっているのでは無いでしょうか。
>
> 以下のフォーラムが参考になると思います。
> https://armadillo.atmark-techno.com/forum/armadillo/2907#comment-4824

少し補足させていただきます。

eth0のIPアドレスをDHCP取得にした場合や、
固定IPアドレス+ゲートウェイで設定した場合は、
eth0がデフォルトゲートウェイになってしまいますが、
eth0に固定IPアドレスだけ(ゲートウェイなし)設定した場合には、
他にゲートウェイになるインターフェース(ppp0など)があれば、
eth0がデフォルトゲートウェイになることはないようです。

固定IPアドレス+ゲートウェイというのは次のような設定です。
nmcli connection modify ethernet-eth0 ipv4.method manual ipv4.addresses "192.168.1.100/24 192.168.1.1"

eth0に固定IPアドレスだけ(ゲートウェイなし)というのは次のような設定です。
nmcli connection modify ethernet-eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24

--
なかむら

中村です。

自分の投稿への補足(半分訂正)です。

> 固定IPアドレス+ゲートウェイというのは次のような設定です。
> nmcli connection modify ethernet-eth0 ipv4.method manual ipv4.addresses "192.168.1.100/24 192.168.1.1"

jessieのnmlciではこの書式でゲートウェイを設定できましたが、
stretchでは怒られてしまいました。
次のようにゲートウェイを分けて指定しなければならないようです。
nmcli connection modify ethernet-eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1

// Armadillo-IoTG3のマニュアル2.0.0の固定IPの設定例は、
// この書式に変更されてましたが、今まで気づかず・・・。

--
なかむら

中村様

お世話になっております。大橋です。

何から何まで具体的に教えてくださってありがとうございました。
おかげさまで、問題がすべて解決しました。
ぐぐっても何をしたらいいのかわからなかったコマンドも説明してくださって、今回の状態と結びついたので、これを機に勉強もできそうです。
SSHについては、結局直接は繋がらないので、ポートフォワーディングで実現しました。
(他社の格安simは固定IPでなくてもSSH接続できているのですが他の部分も違うため私には原因を調べられず)

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