1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ブラウザ内でブラウザを動かす

Posted at

fiord Advent Calendar 2025 6 日目の内容となります。

Browser-in-the-Browser について再度調べてから記事を書こう!と思っていたら、つい別のコンテンツがあったことを思い出しました。

仮想ブラウザ

Browser.lol というサービスをご存じでしょうか?仮想ブラウザを利用できるサービスで、端末外部にある別のインスタンス上で動いているウェブブラウザの画面をブラウザ内に表示し、端末とは隔離された環境でブラウザを使える、というものです。

セキュリティ的な観点であれば、VPN に類似した使い方も可能で、「仮想ブラウザからのみアクセス可能」といった制御も可能かもしれません。

一方で、端末の設定を変えたくない場合、つまり特定のバージョンのブラウザを利用して操作する/検証するような作業においても有用であると考えられます。

大まかな仕組み

インスタンスをリクエスト時に立ち上げ(あるいは用意しておき)、専用のブラウザを立ち上げてその画面をクライアントと共有します。

この画面共有に関してはサンドボックスサービスの技術と重複することとなり、大まかに下記の 2 つがあるかと思います。

  • VNC/RDP over WebSocket 系: n.eko(WebRTC) で利用されています。後者と比べて若干遅いですが、愚直な方法な分互換性も高いです。
  • Headless Browser + 差分をストリーミングする: BrowserBox がそうであると推測してます。Headless Browser を起動し、スクリーンショットを定期的に取得します。画像差分をストリーミングすることで通信量を抑えて、結果的にフレームレートを高めようとするものです。Headless であるため、必ずしも正常に動作する保証は出来ないかと。

試しに n.eko を使ってみる

n.eko は Docker を用いてローカルにサーバーを用意することが出来ます。試しに使ってみましょう。

$ git clone https://github.com/m1k1o/neko.git
$ docker compose up 

この際、自分の環境(Windows11/WSL)では、下記のような docker-compose.yml にしました。

services:
  neko:
    image: "ghcr.io/m1k1o/neko/firefox:latest"
    restart: "unless-stopped"
    shm_size: "2gb"
    cap_add:
      - SYS_ADMIN
    security_opt:
      - "apparmor=unconfined"
    ports:
      - "8080:8080"
      - "52000-52100:52000-52100/udp"
    environment:
      NEKO_DESKTOP_SCREEN: "1920x1080@30"
      NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko
      NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin
      NEKO_WEBRTC_EPR: "52000-52100"
      NEKO_WEBRTC_ICELITE: 1
      NEKO_WEBRTC_NAT1TO1: "127.0.0.1"

この状態で、http://localhost:8080 に接続し、ユーザー名はお好きなように、パスワードはデフォルトでは neko(通常ユーザ)、admin(管理者ユーザ)を入力してください。これは docker-compose.yml にて環境変数で指定されたものとなります。

スクリーンショット 2025-12-06 023640.png

n.eko は通常の仮想ブラウザのみならず、この仮想ブラウザを複数人で共有、チャットすることが可能です。これは面白い機能だと思います。

スクリーンショット 2025-12-06 221300.png

クライアントから n.eko が動作するサーバーを経由し、実際には n.eko 内部で動作するブラウザから外部へリクエストを行うため、VPN のような機能を有します。
また、ベースとなる Docker Image を変えることで、ブラウザのバージョンも変更出来そうです。ただし、この機能に関してはサービスとして動いている Browser.lol(無料版はリクエスト数に制限がありそう)や Browserling(無料版は 3 分/セッション)などを利用することが望ましいです。

まとめ(とおまけ)

このように、使い方次第では便利になりそうな技術として、仮想ブラウザを紹介しました。

...ところで、この機能は VPN として機能すると話しました。従業員が不正に情報を流出させる際のルートとして利用されないか心配です。
もし業務上利用しないのであれば、当該サービスのドメインへのアクセスはブロックしてしまった方がよいのかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?