OSC 2014 Tokyo/Fall参加、LT発表

OSC 2014 Tokyo/Fallに参加してきました。

まじめに記録を取りながら行ってきた、というよりはふらふらと興味があるものを見たり聞いたりしていたのでここにまとめて書くようなこともないのですが、しかしどこに行っても、とは言い過ぎとしてもあちこちでRasberry Piが使われていたりするのは印象的でした。セミナーも幅広く、例えば関数型言語を用いてカーネルを設計したい、みたいなコアなものもあれば流行りのCI/CDに関してまずは導入する観点のものなどもあり、それぞれその観点で面白い話が聞けたりするわけですが、CI/CDなどに行ってみると人が多くさすが流行りの分野、というような感じがしたりはします。いわゆる「怖い人」(いい意味での)がたくさんいらっしゃる一方で、そのような状況に物怖じしてしまうのは難しいところです。その界隈にずっといらっしゃる方と話して一旦こちらから話すような場面になるとどうすればいいのか、などは慣れたいところではありますが難しいところではあります。なんとなく内輪で成立しているのだろうか、と思ってしまうコミュニティでもそうではないようなので積極的に話しかけていくべきなのだろう、とは思いますが。

さて、LTをしてきたので、SlideShareにも置いたのですがここにもスライドを置いておきます。内容は以前までこのブログで登場している、ルーター的なもので競技プログラミングをする、という観点です。実験そのものはブログに登場しているものですが、まとめる過程である程度の考察を加えたいる一方で、時間の都合上、あるいはスライドを書いている時に忘れていたものもあり、色々端折られています。

osc_2014_tokyo_fall_lt

VyOSで競技プログラミングを試みた軌跡

ここ半年ほどやたらと脆弱性のニュースが多い気がしますが、今度はSSLv3周りでPOODLEとかいう名前だけは可愛い脆弱性の話題、古いものを使っているユーザーをどれほど守るかと、どれほどユーザーの安全を守るかという二つの相反する要素の葛藤を強いられている人も多そうですね。

さて、以前に、ルーターで競技プログラミングという記事を書きました。Advent Calendarに向けて書いた記事で、競技プログラミングを引き合いにルーターのパケット割り振りの機能を用いて計算を行うことができるかという記事で、iptablesを使用してある程度繰り返し処理や記憶を伴う計算をある程度することができそうだ、という感じを出しながら一問解くことができました。しかし、この記事には、iptablesなのでルーターっぽくないという問題点がありました。
この問題を解決するための次のステップとして、自由度はそれほど下がらないと思われつつももう少しルーターっぽい感じの操作体系となるVyOSを用いることを考え、昨年の記事の手法をそのままVyOSに適用可能かについて検討しました。

まずは、VyOSのインストールを行います。VyOSのウェブページから最新版のインストーラ(インストールした時は1.0.5だったので1.0.5で試みましたが、最近1.1.0が出たようです。)のイメージをダウンロードし、起動し、初期設定を行いました。VyOSの解説を目的としたわけではないので、必要ならVyOSのUser Guideを参照してください。

さて、ここで、パケット転送を思い通りに行うために必要なコマンドを実行する必要があります。前回の記事で使用したものでは

  • 特定のポートに届いたパケットを特定のホスト・ポートに転送
    • その際、特定のフラグを叩くこともある
    • 特定のフラグが過去60秒に一定回数叩かれていることを前提条件としているものもある

という条件をたくさん設定することにより機能を実現しました。1-65535それぞれのポートがどこに対応するかはPerlで計算した上で予め流し込んでおきました。

今回この手法を設定するにあたり、まずは以下の様なコマンドを用いて転送ができるようでした。

set nat source rule 10 destination port 1
set nat source rule 10 translation address 192.168.150.2
set nat source rule 10 translation port 32769

そして、これの挙動を過去の記憶によって変動させるため、以下の様なコマンドを実行する必要があると思われました。

set nat source rule 10 state new 'hoge'

しかし、これはうまくいきません。

vyos@vyos# set nat source rule 10 state new 'hoge'

  Configuration path: nat source rule 10 [state] is not valid
  Set failed

[edit]

nat sourceのruleに対してstate、というのはうまくいかないようです。firewallについてはうまくいくようですが、これはポートノックや攻撃者をある程度締め出すために使われるようなので、natには不要と判断されるのかもしれません。
これを受け、これと同等のコマンドをウェブ検索や公式ページでの検索で探しましたがみつかりませんでした。

そのため、現状ではVyOSで競技プログラミング、あるいは計算を行うことができていません。今後の課題となると考えられます。

繰り返し処理を行うにあたっては転送によりポートを変えながら何度も転送することは必須と考えられるため、この間にマシン自体の状態を変化させることは、変数を用いた処理を行うのに事実上必要な処理だと思われますが、これができないとなると、VyOSを用いて複雑な計算を行うことは困難であると考えられます。これはルーターで競技プログラミングを行うにあたって重大な障壁であると考えられ、現状では当方では打開策を思いつくに至りません。これについて現状を打破するのにつながる可能性のある情報などがありましたら、是非コメント欄や電子メール、SNSなどでご一報いただければと思います。