SORACOM Developers

Getting Started

SORACOM Junction のリダイレクション機能を利用し、VPGを通過するパケットの経路を変更する

当ガイドでは、SORACOM Junction(以下、Junction)のリダイレクション機能を利用し、VPGを通過するパケットをVPCのEC2インスタンスを経由するように経路を変更して転送する操作を実施してみます。

SORACOM Junctionとは

「SORACOM Junction」(以下、Junction)とは、Virtual Private Gateway (以下、VPG)を通るパケットに対して、ミラーリング、リダイレクション、 インスペクションの3つの機能を提供するサービスです。VPG については、Virtual Private Gateway (VPG) 機能詳細も合わせてご確認ください。

Junction の提供する3つの機能

ミラーリング

ミラーリング機能では、VPGを通過するパケットのコピーを指定の宛先に送信します。 以下の図は、AirSIMを使用したデバイスがVPGを経由して、インターネットにアクセスしている例です。デバイスはインターネットにアクセスしていますが、パケットのコピーが指定の宛先(ここでは、Customer VPC/お客様のシステム)に送信されます

ミラーリング

リダイレクション

リダイレクション機能は、VPGを通過するユーザーパケットがお客様が指定したサーバを経由するように経路を変更して転送します。 以下の図は、AirSIMを使用したデバイスがVPGを経由して、インターネットにアクセスしている例です。インターネットにアクセスしようとするデバイスからのパケットは指定の宛先(ここでは、Customer VPC/お客様のシステム)に転送されます。転送後のルーティングは、Customer VPC/お客様のシステムで行います。 なお、当機能は、Gateの使用が必要となりますリダイレクションのパケット転送先は、Gate Peerとなります。

リダイレクション

インスペクション

インスペクション機能は、VPGを通過するパケットを解析し、アプリケーションの判別といったVPGを通るパケットの統計情報を提供します。 以下の図は、AirSIMを使用したデバイスがVPGを経由して、インターネットにアクセスしている例です。デバイスはインターネットにアクセスします。 VPGを通るパケットの統計情報が指定の宛先(ここでは、Customer VPC/お客様のシステム)に転送されます。VPGを通るパケットの統計情報、フォーマットの詳細は「インスペクションで送られるパケットの統計情報」を参照してください。

インスペクション

リダイレクション機能を使用して、VPGを通過するパケットの経路を変更して転送する

以下のステップでリダイレクション機能を使用して、VPGを通過するパケットを事前に設定したトンネルを通してお客様のVPC内のEC2インスタンスへ転送する設定を行ない、実際にパケットがEC2インスタンスへ転送されていることを確認します。

  1. Gateを使用してVPGとEC2インスタンス間に仮想L2ネットワークを構築する
  2. Junctionのリダイレクション機能を設定する
  3. Junctionのリダイレクション機能を使用してVPGを通過するトラフィックがEC2インスタンスを経由するように経路を変更して転送されていることを確認する

1. Gateを使用してVPGとEC2インスタンス間に仮想L2ネットワークを構築する

Junctionのリダイレクション機能はIPルーティングにおけるNext Hopを変更することでお客様が指定したサーバを経由した通信を実現することから、お客様のサーバとVPGの間でL2ネットワークを構築する必要があります。これを簡単に実現する方法として、SORACOM Gateによって仮想L2ネットワークで接続されたGate Peerを活用することが可能です。すなわち、SORACOM Gateで設定したGate PeerをVPGのNext HopとなるようにVPGを通過するパケットがルーティングされます。

まず、「SORACOM Gate を使用してデバイスにアクセスする」 に従ってSORACOM GateによりGate Peerを追加し、Gate PeerとVPGとの間で仮想L2ネットワークを構築してください。

設定が終ったら以下の項目が正常に設定されていることを改めて確認してください。

ここでは例として、VPCピアリングしたVPCのCIDRブロックは 192.168.255.0/24 であるとします。

まず、Gate Peerでiptablesを使用してIPマスカレードのルールを追加します。

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

次に、Gate Peerのパケット転送が有効になっていることを以下のコマンドで確認します。

$ sudo iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  any    vxlan0  anywhere             anywhere
    0     0 MASQUERADE  all  --  any    eth0    anywhere             anywhere

以下の項目を確認してください。

2. Junctionのリダイレクション機能を設定する

「SORACOM Gate を使用してデバイスにアクセスする」 で作成したVPGの設定画面を開きます。「Junction 設定」タブを開きます。

正常にGate Peerが設定されて いない 場合、以下のように表示されますので、Gate Peer となる EC2 インスタンスを登録するを参考にして、Gate Peerを追加してください。

Redirection

Gate Peerを追加したら、「高度な設定」タブを開きます。「お客様の Gate Peer 一覧」でゲートウェイ IP アドレスに指定するGate Peerの「デバイスサブネット内 IP アドレス」を確認します。ここでは 10.164.245.34 となっています。

Redirection

次に、「Junction 設定」タブを開きます。「SORACOM Junction: ミラーリング設定」でトグルスイッチを「ON」に、「ゲートウェイ IP アドレス」で先程確認したIPアドレス、 10.164.245.34 を選択して「リダイレクション設定を保存」をクリックします。

Redirection

以上でJunctionのリダイレクション機能の設定は完了です。

3. tcpdumpを使用して、経路が変更されていることを確認する

tcpdumpを使用して、パケットが転送されていることを確認します。

注意
  • 設定したVPGが指定されたグループに所属する Air SIM が挿入されたデバイスで通信が可能であることを確認してください。通信が可能であれば設定が正しく完了し、VPGを通過するトラフィックがEC2インスタンスを経由するように経路を変更して転送されています。
  • もし通信ができない場合は設定に誤りがあるので、再度Gateの設定およびJunctionのリダイレクション機能の設定を確認してください。
  • また、Gate Peerがインターネットへ接続可能な環境にない場合、設定したVPGと同じグループに所属するSIMが挿入されたデバイスもインターネットへ接続できないことに注意してください。

Gate PeerであるEC2インスタンスへSSHでログインします。 <public-ip> をGate PeerのパブリックIPアドレスに置き換えてください。ここではEC2インスタンスがAmazon Linuxとして ec2-user でログインしていますが、Ubuntuの場合は ubuntu など、適宜各自の環境に合わせてユーザ名を変更してください。また、秘密鍵ファイルも各自の環境に合わせて適宜変更してください。

$ ssh -X -i "xxx-dev01.pem" ec2-user@<public-ip>

以下のように tcpdump を使用して経路を変更されたパケットがVXLANでカプセル化されて転送されているかを確認します。VXLANでカプセル化されてeth0へ入ってきたパケットが再びeth0から出ていく様子が確認できれば成功です。 以下の例ではデフォルトでtcpdumpがインストールされていますが、お使いのEC2インスタンスのLinuxディストリビューションでtcpdumpがインストールされているか確認し、もしされていない場合にはパッケーマネージャでインストールしてください。

ec2-user@ip-172-16-1-92:~$ sudo tcpdump -vvv -i eth0 not port ssh
sudo: unable to resolve host ip-172-16-1-92
...

(オプション) iptablesを使用して、ICMPパケットをブロックする

ここで、リダイレクション先でトラフィックをコントロールする一つの例として、実際にパケットをフィルタリングできることを確認するためにiptableのルールを追加して、VPGと同じグループに所属するSIMが挿入されたデバイスからの ping コマンドで生成されるICMPパケットをブロックし、いわゆる"pingが通らない"状態にできることを確認してみます

まず、VPGと同じグループに所属するSIMが挿入されたデバイスから ping コマンドでICMP Echo Requesstに応答するホスト(下記の例では soracom.io)へICMPパケットを送信します。 pingコマンドの送信先は任意のホストを指定できます。

$ ping -c 3 soracom.io
PING soracom.io (52.222.205.45) 56(84) bytes of data.
64 bytes from 52.222.205.45: icmp_seq=1 ttl=247 time=4.52 ms
64 bytes from 52.222.205.45: icmp_seq=2 ttl=247 time=4.61 ms
64 bytes from 52.222.205.45: icmp_seq=3 ttl=247 time=4.51 ms

--- soracom.io ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 4.511/4.550/4.618/0.048 ms

次に、Gate Peer上で iptables でルールを追加しICMPのEcho RequestがGate Peerより先に転送されないようにします。

$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP

(なお、この設定は sudo service iptables saveiptables-save を使用しない限り永続的に反映されず、Gate Peerを再起動した際などには設定が消失することに注意してください。このガイドでは一時的に有効にするだけなので、永続化はしません。)

次にVPGと同じグループに所属するSIMが挿入されたデバイスから ping コマンドで soracom.io へICMPパケットを送信します。 pingコマンドの送信先はGate Peer以降に通過する任意のホストを指定できます。

$ ping -c 3 soracom.io
...

ここでpingの対象ホストからの反応が返ってこない(対象ホストへICMパケットが届いいていない)ことが確認できたら成功です。

最後に、作成した iptables のルールを削除しましょう。まず、作成したルールのchain中のルール番号を取得します。 OUTPUT chainのセクションを参照して、ICMPパケットをdropしているルールのルール番号を確認します。

$ sudo iptables -L --line-numbers
...
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ufw-before-logging-output  all  --  anywhere             anywhere
2    ufw-before-output  all  --  anywhere             anywhere
3    ufw-after-output  all  --  anywhere             anywhere
4    ufw-after-logging-output  all  --  anywhere             anywhere
5    ufw-reject-output  all  --  anywhere             anywhere
6    ufw-track-output  all  --  anywhere             anywhere
7    DROP       icmp --  anywhere             anywhere             icmp echo-request
...

上記例でルール番号は 7 となっているので、以下のコマンドでルールを削除します。

$ sudo iptables -D OUTPUT 7

上記を実行後、再度冒頭と同じようにpingコマンドを実行してみてください。ルールを削除したことで再度疎通するようになったことを確認できます。

以上、リダイレクション先でトラフィックをコントロールする例として、iptablesを使ったパケットフィルタリング実施してみました。SORACOM Junctionのリダイレクション機能を応用することで用いることで、パケットのフィルタリングだけでなく、tcを使った帯域制御や、Snort を使用してネットワークへの侵入検知を行ったり、パートナーソリューションを組み合わせることでさらに高度なトラフィック処理を行うといったことが自在に可能となります。

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

サービス機能詳細

Developer Tools

pagetop