DwmGetDxSharedSurface を使ってみた


Windows の隠し API である DwmGetDxSharedSurface を使ってみました。
これは Windows7 以降で存在するようで、無事に Windows10 の環境でも使えました。
そのまま素直に使おうとするといくつか課題はありますが、面白い機能だと思ったので紹介することにしました。なお Undocumented API の1つなので、ご利用は自己責任で。

これは何?

指定されたウィンドウの画像をキャプチャすることが出来る API です。ウィンドウが他のウィンドウで隠されていても内容をキャプチャすることが出来ます。

続きを読む


iptables で Symmetric NAT


ずいぶん久しぶりに Linux を使っての NAT Box を作成しました。
手持ちのブロードバンドルーターが Symmetric NAT のタイプではなかったので、検証のために Linux で Symmetric NAT を作成しました。

NATの種類

NATには、いくつか種類があって フルコーン、アドレス制限、アドレスポート制限、シンメトリック と4種類ほどに大別されます。
・・・というのが数年前のお話でした。実はこれでは現実問題対応出来ないとのことで、現在ではこの区別はレガシー扱いとなっています。

今は、NATのマッピング規則と、フィルタリング規則という2つの観点からルーターNATの特性を判定します。
手持ちのルーターでは、エンドポイント非依存マッピングで、アドレスポート依存フィルタリングというシロモノでした。
というわけで P2P のゲームやアプリにおいては割と都合の良い感じになっています。
しかしプログラムの作成立場としては、ある程度のケースが欲しいもので今回シンメトリックNAT を作ることにしました。

マッピング規則、フィルタリング規則、これらについては検索すると多くの情報が見つかり、わかりやすい記述を見つけることが出来ると思うので、ここでは説明を省略します。
続きを読む



IPv6 only ネットワーク を作ってみる


VMware Workstaion 12.5 を使って、複数の仮想マシンで構成されるネットワークを作っていきます。このネットワークは今流行の IPv6 only のネットワークにしてみたいと思います。この過程で NAT64/DNS64 をセットアップしていきます。

構成について

VMware Workstaion で新規仮想マシンを作る際に、ネットワーク接続を LAN セグメント で作成します。
外とやりとりを行う NAT64 の部分についてのみネットワークアダプタを2つ準備して、一方を NAT なり, ブリッジなりのタイプを設定して外との通信をできるようにします。
そして、作成した “LAN セグメント” の部分を IPv6 only のネットワークとします。ここに所属する仮想マシンは IPv6 のみをもって通信を行います。

これらの関係を図にすると以下のような感じになります。

IPv6 only ネットワークのキモはこの NAT64, DNS64 を担当する Linux サーバーということになります。図中では記入漏れていますが、このサーバーでは IPv6 の DHCP も担当させています。

お断りですが、IPv6 only といっても自分の現環境が IPv4 のみのネットワークのため、IPv6 で外部との通信を行う部分について 実験できずです。
続きを読む


Vulkan へ DirectX11 テクスチャをインポート


世の中の多くの Windows 環境で安定して使えるグラフィックス API は DirectX11 や OpenGL といったところだと思います。
Vulkan API は新しい API のため、既存のライブラリやフレームワークではまだサポートされていなかったりします。そのような状況のためか、 NIVIDA の Vulkan Extension では、 Vulkan とその他 API でやりとりするための機能が用意されました。

また現時点においては、 Khronos の KHX 拡張としても整備が進みそうな気配です。NVIDIA だけでなくサポート範囲が広がってくれることに期待です。

続きを読む


ポリシーベースルーティングの話


1つのPCが複数枚のネットワークアダプタを持ち、いずれのアダプタからもアクセスが可能な場合、スタティックルーティングの設定だけではうまく通信できない場合があります。
このような構成をマルチホーム、マルチホーミングな環境と呼ぶようですが、このときポリシーベースルーティングというものの設定が必要になってきます。
続きを読む


Raspberry Pi で L3 スイッチを作成する


以前に VMware ESxi と VyOS を用いて3つのネットワークセグメントを接続することをやりました。今回はこれを Raspberry PI を用いて実現できないかを実験しました。

準備

前回同様、都合により3つのネットワークセグメントからのパケットはタグポートで出ているものを使用することにします。このスイッチは、 NETGEAR の GS108Ev3 です。 ESXi につながっていた LAN ケーブルを Raspberry Pi に差し替えた、と思ってもらえればと思います。

続きを読む



複数セグメントを接続するルーターの作成 前編


実験環境で、3つの異なる LAN セグメントを接続するルーター(L3スイッチ)が必要になり、これを準備した記録です。

通常のブロードバンドルーターを複数使えばできるかなと思ったのですが、予想外の結果でした。結論としては VyOS を使用して自分で設定する!というところになりました。

ブロードバンドルーターの組合せ

一般用のブロードバンドルーターは2つの LAN セグメントを接続するものと見ることができます。そのため、これを3つくらい使えば、接続ができそうな感じですが、致命的な問題があります。
それが、「外部から内部への通信の制限」という点です。通常外部からのアクセスは著しく制限されることを期待されているブロードバンドルーターではファイアウォールが設定され、パケットフィルタが設定され、と扱いにくいです。よって、このブロードバンドルーターを組み合わせるという案は廃案になりました。

続きを読む