« TE0802のサンプルプロジェクトをビルドする方法 | トップページ | SSHポートフォワーディングを使ったテレワークによるFPGA開発のセキュリティ改善 »

2020.04.11

SSHポートフォワーディングを使ったテレワークによるFPGA開発

テレワークでFPGAを開発したいけど、

  • 会社がVPNに対応してくれない
    • 外からの接続を受け付けない
    • NATが超えられない
  • 情報管理部門が許してくれない
  • 回線が細くてリモートデスクトップするに耐えられない
  • 会社のVPNがすぐ切れる

こんな悩みはありませんか?

状況としては、自宅のPCでFPGAのビルドをするけど、機械は会社や学校にあるという場合を想定します。

い。

Nat

Vivadoを使ってFPGAの書き込みやデバッグだけはしたい! というのであれば、SSHポートフォワーディングをすると何とかなります。
SSHポートフォワーディングを使うにはグローバルIPを持ったSSHサーバが必要ですが、自宅も会社(学校)もTCPのクライアント側になるので、NATを越えられるし、ファイアーウォールも越えられるからです。つまり、インターネット上にあるSSHが動くサーバを介して、任意の2点間でトンネルを作ることができます。
Tunnels

Vivadoのリモート対応

VivadoのJTAGまわりのツールはもともとネットワークに対応していて、概ね次の図のようになっています。

Xilinx_jtag

実はローカルPCでVivadoを使っていても、内部ではhw_server というプログラムが動いて、TCPの3121で待ち受けています。そして、VivadoやXILINX SDKがFPGAに書き込むときにTCP 3121を通じていろいろなコマンドを与えています。

したがって、hw_server.exeを起動しておけばVivadoは元からリモート接続に対応しているので、遠隔操作ができるのです。

hw_server.exeは、Vivadoをインストールしたフォルダのbinの中にある hw_server.batをダブルクリックすることで起動できます。
Hwserver

起動するとDOSプロンプトの以下のような画面が開きます。これで待ち受けはOKです。
Listen3121

サーバを借りよう!

やるべきことは、グローバルIPアドレスを持ったサーバを借りることです。
AmazonのAWSで、一番安いサーバで十分でしょう。私はUbuntu Linuxの動く最小構成のサーバを借りました。そして、セキュリティグループというのを開き、通したいポートのインバウンドルールを追加します。ログインしてからufwで設定するのではなく、ファイアーウォールの設定はWebのこの画面から行えばよいようです。
Inbound_rules

VivadoのJTAG通信はTCP:3121ですが、同じ番号だと困ることになるので、3121に10000を足して13121番を開けることにしました。sshd_configの設定は特にありません。サーバ上で作業することもありません。

Amazonで借りられるサーバにログインするにはキーペアという証明書が必要で、サーバを作ったときに配布されます。それがないと絶対にログインできないので、かなり安全です。

会社と家庭、それぞれの準備

JTAGサーバ(会社)側の準備

会社の中でhw_serverを起動したPCでTeraTermを起動します。そして設定→SSH転送の設定を開きます。
Teraterm_1

SSHポート転送の設定は、リモートサーバのポートを13121にして、ポートを3121にします。
Teraterm_2

この設定をして会社のPCからSSHサーバに22番で普通に接続すると、リモートサーバの13121へのアクセスが会社サーバの3121に転送されます。

家庭側の作業

Vivadoを起動し、Open Hardware ManagerでConnected toにRemote serverを選び、リモートサーバのIPアドレスを入れます。また、TCPのポート番号は先ほどの13121とします。
Vivado_remote

これで無事にリモートサーバ経由で接続できました。
Vivado_remote2

接続方法のまとめ

  • リモートのSSHサーバを立てておく。
  • リモートサーバではTCP:13121(任意)を開けておく
  • 会社PCでhw_server.batを起動しておく
  • 会社PCからリモートサーバにSSH(TCP:22)でつなぐ
  • 自宅PCでVivadoを起動し、Remoteの13121につなぐ
  • リモートサーバと会社PCのTeraTermの間でトンネルが作られ、会社PCのTCP:3121に転送される
  • 自宅PCから会社PCのhw_serverに接続できる


というわけです。

Ssh_forward
繰り返しになりますが、会社からリモートサーバへただのSSHのセッションを張るだけなので、ファイアーウォールもNATも越えられるというわけなのです。

性能はどうか

ZYNQ UltraScale+のXCZU2CGに書き込む時間を比べてみました。

  • ローカルPCでダイレクト接続・・・2秒
  • 会社と自宅でVPNを張った(L2TP)場合・・3~6秒
  • TCPポートフォワーディングの場合・・5秒

リモート接続してもそんなに遅くはならないという印象です。AWSがいいバックボーンを持っていると思われ、かなり安定してトンネルできます。
VIOもロジアナも使えるので、テレワークでFPGAを開発するのが少しだけ楽になるかと思います。

|

« TE0802のサンプルプロジェクトをビルドする方法 | トップページ | SSHポートフォワーディングを使ったテレワークによるFPGA開発のセキュリティ改善 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« TE0802のサンプルプロジェクトをビルドする方法 | トップページ | SSHポートフォワーディングを使ったテレワークによるFPGA開発のセキュリティ改善 »