0
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?

社内プロキシ環境下で Cntlm を使ってプロキシを越えるノウハウ

Last updated at Posted at 2025-07-09

概要

セキュリティの厳しい会社だと、社内ネットワークから外に出る際にプロキシサーバを通さなければならいことがあります。
このプロキシがなかなか厄介で、開発を進める上で必要な npm installbrew install といったコマンドもプロキシ経由での通信が求められるため、そのままだと通らないことがあります。

この記事では、そんな社内プロキシ環境下でどうプロキシを越えて通信するかを記述します。
結論から言うと、 Cntlm を使ってプロキシ問題を解決します。

プロキシ環境下での悩み

例えば curl でいうと一応 HTTP_PROXY HTTPS_PROXY などを設定すればプロキシを越えられるものの、以下の悩みがあります。

  • 社内へのアクセスと社外へのアクセスで、プロキシの ON/OFF を切り替えるのが面倒臭い
  • npm など NTLM 認証に対応していないアプリケーションがプロキシを越えられない
  • 各アプリケーションごとにプロキシの設定をしないといけない
  • パスワードが変わったときに上記の設定を全部変えるのがしんどい

などなど・・・
そこで Cntlm の出番です。

Cntlmとは

Cntlmとは、プロキシサーバとの間に挟まるローカルのプロキシサーバです。
何を言っているかわからないと思うので以下にイメージ図を描きます。

自分のPC内の各種アプリケーションが通信する場合に Cntlm が間に挟まりますということです。
これがあると何が嬉しいかというと

  • npm など NTLM 認証に対応していないアプリケーションのために、NTLM認証を代行してくれる(つまりプロキシを越えられる)
  • プロキシの設定を1ヶ所に集約できる(つまりパスワードが変わったときに1ヶ所だけ変えればいい)
  • プロキシを経由させたくない社内への通信は Cntlm の NoProxy に設定しておけば一律で設定可能

です。

NTLM 認証とは
認証プロトコルの一種です。NTLM/NTLMv2 認証のプロキシサーバは、ユーザ名・パスワードを入力して認証する必要があります。Cntlm はクライアントから受け取ったリクエストを NTLM 認証付きで社内プロキシに転送し、その結果をクライアントに返します。これによりクライアント側は NTLM 認証を意識する必要がなくなります。

Cntlmのインストールと設定

Cntlmをインストールして設定する手順を書きます。
Mac を前提に書きますが、Windows でも同じような流れで設定できると思います。

インストール

brew install cntlm

続いて設定ファイルを編集します。設定ファイルは以下のパスにあります。

  • Mac: /opt/homebrew/etc/cntlm.conf
  • Windows: C:¥Program Files (x86)¥Cntlm¥cntlm.ini

以下のように入力します。

Username        YOUR USERNAME
Password        YOUR PASSWORD
Domain          example-company.co.jp
Proxy           example-proxy.co.jp:8080
# NoProxy に社内システムを記載する
NoProxy         localhost, 127.0.0.*, 10.*, 192.168.*
Listen          3128
# プロキシによって「NTLM」か「NTLMv2」を指定する
Auth            NTLM

Domain について
NTLM 認証を行う際のドメイン名を指します。これは、プロキシサーバ自体のドメイン名とは必ずしも一致しません。正確な情報はシステム管理者に聞かないとわからないかもしれません。
Windows だと echo %USERDOMAIN% と入力すると、ログインしているドメイン名が表示される、という情報はありました。

Cntlmの起動

設定が完了したら、Cntlmを起動します。

brew services start cntlm

もし起動後に設定ファイルを書き換えた場合は再起動が必要です。

brew services restart cntlm

そうすると http://127.0.0.1:3128/ で Cntlm が起動します。

各種アプリケーションのプロキシ設定

Cntlmが起動したら、あとは各アプリケーション、ツールのプロキシ設定をCntlmのアドレスに向けます。
ここでは代表的なものを例として挙げます。

curl, brew 等のコマンド

curl brew 等のコマンドは HTTP_PROXY HTTPS_PROXY 環境変数を参照するので、以下のように環境変数をセットしてあげる必要があります。
毎回これをするのは面倒なので .zshrc などに登録しておくと良いと思います。

export HTTP_PROXY=http://127.0.0.1:3128/ HTTPS_PROXY=http://127.0.0.1:3128/

npm, npx

npm installnpx install したいの場合は、以下のコマンドでプロキシを設定します。

npm config set proxy "http://127.0.0.1:3128/"
npm config set https-proxy "http://127.0.0.1:3128/"
# もし SSL エラーが出るようであれば以下を設定
npm config set registry http://registry.npmjs.org/
npm config set strict-ssl false

Git

git の場合は、以下のコマンドでプロキシを設定します。

git config --global http.proxy http://127.0.0.1:3128/
git config --global https.proxy http://127.0.0.1:3128/

もし特定のプロジェクトのみに設定したい場合は --global を付けずに実行します。

docker

docker でプロキシ設定する場合は、Settings > Resources > Proxies を開き以下のように設定します。

スクリーンショット 2025-07-09 8.52.56.png

忘れずに「Apply & restart」しましょう。

その他のデスクトップアプリ

デスクトップアプリでプロキシを越えたい場合は、そのアプリケーションにプロキシ設定があればいいですが、ない場合は少し工夫が必要です。
Mac であれば以下のようにアプリケーションを起動することでプロキシを越えられることがあります。

# 環境変数にセット
export HTTP_PROXY=http://127.0.0.1:3128/ HTTPS_PROXY=http://127.0.0.1:3128/
# 環境変数を引き継いだ状態でコマンドラインからアプリケーションを起動する
open /Applications/Warp.app

これを毎回やるのは面倒なので、Mac であれば「ショートカット」アプリケーションを使ってこのシェルを登録しておくと便利です。

スクリーンショット 2025-07-09 8.59.00.png

トラブルシューティング

もしCntlm経由での通信がうまくいかない場合は、以下の点を確認してみてください。

  • Cntlmが起動しているか?
    • サービスまたはフォアグラウンドでCntlmが正しく起動しているか確認します。
  • cntlm.conf の設定は正しいか?
    • Proxy のIPアドレスとポート番号が正しいか
    • Username, Domain が正しいか
    • Auth の設定を変えてみる

それでも解決しない場合は、Cntlm を -v をつけて起動し、ログを確認すると良いです。

# 一旦 Cntlm をストップ
brew services stop cntlm
# フォアグラウンドかつ verbose モードで起動
cntlm -v -f

この状態で実際に Cntlm を使うアクセスをすると、ログが表示されます。

0
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
0
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?