朝日ネット 技術者ブログ

朝日ネットのエンジニアによるリレーブログ。今、自分が一番気になるテーマで書きます。

インフラエンジニアを目指す学生のためのインターンメニュー! pfSense で PPPoE サーバーを構築してみる

朝日ネットのthrkrpです。 社会人としてもまだまだ勉強中のピヨピヨ技術者ですが、ブログを初めて書いてみます。

この記事では、pfSense 上で PPPoE サーバーを構築し、クライアントとの間に PPPoE セッションを張ってみた様子を紹介します。 学生向けのインターンメニューとして検討中のものですので、比較的初心者にもわかりやすい内容かと思います。

ぜひご覧ください。

  • 背景と目的
  • pfSense とは
  • PPPoE とは
  • 構築
    • サーバー・ネットワーク構成図
    • VirtualBox の設定
      • ネットワークの作成
      • pfSense の起動と初期設定
      • Debian の起動と初期設定
    • pfSense の設定
      • Interface
      • Gateway
      • Firewall
      • PPPoE Server
    • Debian の設定
      • Interface
      • pppoeconf
  • 検証
    • PPPoE セッションを確立させる
    • IPアドレスを確認する
    • pfSense で接続状況を確認する
    • 外部接続ができるかを確認する
    • ユーザー認証のパケットを確認する
    • 認証方法の違いを確認する
  • まとめ
  • 採用情報

背景と目的

当社では高専生や大学生を対象としたインフラ系インターンを2024年度に実施予定です。 ISP事業に関係のある技術を学習してもらいたという思いの下、主に情報工学系の学生を念頭に置きインターンで実施するメニューの検討が進んでいます。

今回取り上げるのは、メニュー候補の「pfSense というソフトウエア上で PPPoE サービスを提供するサーバーを構築する」というものです。 pfSense の PPPoE サーバーの機能はこれまで使用した例が無く、社内にノウハウがないため、この構築が実際にできるのかを検証してみました。

続きを読む

LibreChatの採用とGPT-4の開放(社内用ChatGPTクローンのアップデート)

朝日ネットで技術部門の執行役員をしている草場です。
前回に引き続き、社内用ChatGPTについての取り組みを紹介します。

前回記事はこちら techblog.asahi-net.co.jp

  • 6月以降のできごと
  • コスト
  • OSS選定(LibreChat選定)
    • Azure OpenAI Serviceでも言語モデルの変更が可能
    • 認証オプション
    • コンフィグでの機能制御
    • メンテナンス・更新頻度
  • システム構成
  • 苦労話
    • Azureでのモデル切替の設定方法
    • Automated Moderation System
    • Google認証
  • 今後について
  • 最後に
  • 付録(.env diff)
続きを読む

オブジェクト指向を5年間理解できなかった人間がオブジェクト指向を説明する(第6回)

こんにちは。朝日ネット社員のjiweenです。

前回までで重要なパターンは説明し終わりました。

最終回となる今回では、初学者にとって必要性が低いと判断し後回しにしていたパターンに触れます。 GoFパターンのマニアでなければ、読み飛ばしていただいても問題ありません。

最後では連載のまとめを行います。

続きを読む

シェルスクリプトとの対比で理解するPythonのsubprocess

はじめに

開発部の ikasat です。

皆さんは git, ssh, rsync のような外部コマンドを呼び出すスクリプトを書きたくなったことはありますか? 個人的にこの類のスクリプトは最初はシェルスクリプトとして書くのですが、改修を重ねるうちに肥大化して処理も複雑になり、 後から Python のような汎用プログラミング言語で書き直すことがよくあります。

外部コマンド呼び出しを書き直す際に、Git 操作のために pygit2、 SSH 接続のために paramiko のようなライブラリをわざわざ使うのは大がかりだったり、 rsync に相当するようなこなれたライブラリが存在しなかったりする場合があります。 そのような時は標準ライブラリの subprocess モジュールを利用し、Python から外部コマンドを呼び出すことになるでしょう。

しかしながら、Python のチュートリアルページには subprocess モジュールの解説はなく、 いきなり標準ライブラリのリファレンスを読むことになります。 subprocess モジュールはバージョンアップに従いAPIが多数追加されており、また各種OSの事情が同じ箇所に記載されているため、一見して利用法をなかなか掴みにくいです。

この記事では対象環境を Linux に絞り、シェルスクリプトと Python スクリプトを対比した上で subprocess モジュールの典型的な利用方法について述べます。 また、記事の後半では subprocess モジュールの詳細に立ち入り、込み入ったケースでの注意点について記載します。

対象読者

  • subprocess を雰囲気で利用している人
    • 具体的には公式のリファレンスや巷の解説記事を多少読んで import subprocess したことがある人
  • はじめに
  • 対象読者
  • 対象環境
  • シェルスクリプトとPythonの比較
    • コマンドを起動する(最も単純な使い方)
    • 終了ステータスを取得する
    • 標準出力を捕捉する
    • 標準入出力をリダイレクトする
    • 標準エラー出力を標準出力にマージして捕捉する
    • 出力を全て捨てる
    • 終了ステータスが0でなければ例外を発生させる
    • Pythonのバイト列・文字列をコマンドに渡す
    • 並行処理を行う
    • Popen と communicate で標準入出力を扱う
    • パイプ処理を行う
    • タイムアウトを設定する
    • シェル経由でコマンドを起動する(要注意)
  • subprocessの詳細仕様と内部実装
    • プロセス間通信の流れ(概要)
    • プロセス間通信の実装(詳細)
    • 子プロセス同士をパイプする際に close が必要な理由
    • Pythonとパイプ書き込みエラー
    • デッドロックと communicate
  • おわりに
  • 採用情報
続きを読む

オブジェクト指向を5年間理解できなかった人間がオブジェクト指向を説明する(第5回)

こんにちは。朝日ネット社員のjiweenです。 今日もデザインパターンを分析します。

今回は、データとその処理を分離して扱うパターンが3つ(Iterator, Visitor, Observer)登場します。ここでは、第2回で説明した「データと振る舞いの一体化は強制されない」ということを思い出してください。どのパターンでもデータと振る舞いが本質的に別の流動性を持っており、そのため自然と分離が起こります。

続きを読む