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?

【EC2】プライベートサブネットで pip3 install 時に Network is unreachable が発生する

0
Posted at

この記事は過去のエラー解決メモを整理したものです。
現在の推奨手順とは異なる可能性があります。
公式ドキュメントを確認して最新情報と差分がないかを確認してください。

事象

プライベートサブネットでモジュールを入れようとして、pip3 install とすると、以下のようなエラーが出ると思います

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fa895d65890>: Failed to establish a new connection: [Errno 101] Network is unreachable')': /simple/pandas/

これはプライベートサブネットがインターネットに繋がっていない(仕様)ことが原因です

NATゲートウェイを使うことで解決できるのですが、いかんせん高いので使いたくない

そこで、NATゲートウェイを使わずにプライベートサブネットでpip3 installする方法を紹介します

環境

前提

以下のような環境を想定しています

Alt text

プライベートサブネットとパブリックサブネットに一つずつインスタンスがある構成です

パブリックサブネットにはElasticIPが紐づけられています

原因

プライベートサブネットがインターネットに接続できない構成になっているため。

対策

ポートフォワーディングして、proxychains-ngを導入することで解決します

Alt text

プライベートサブネットでインターネットを経由してpip3 installを行う方法

プライベートサブネットでインターネットを経由してpip3 installを行うには

  1. ポートフォワーディングの設定をした後で
  2. proxychainsでproxy経由で通信するように設定します

ポートフォワーディングの設定

プライベートサブネットからインターネットに通信できるようにするにはポートフォワーディングを行います

今、次の2つがssh接続できるようになっています

  • PC->パブリック (パブリックインスタンスにElasticIPが紐づけられているため)
  • パブリック->プライベート (プライベートインスタンスはパブリックインスタンスからssh接続できる仕様)

PC->パブリック->(転送)->パブリック->プライベートのようにポートフォワーディングを行うことでプライベートサブネットからインターネットに通信できるようになります

ポートフォワーディングの手順

  1. 公開鍵をパブリックインスタンスにコピーします

    scp -i "C:\Users\xings\.ssh\keys\aws_ax1_project.pem" -r "C:\Users\xings\.ssh\keys\aws_ax1_project.pem" ec2-user@43.207.191.40:/home/ec2-user/.ssh

  2. PCからパブリックインスタンスにssh接続を行いログインします

    ssh -i "C:\Users\xings\.ssh\keys\aws_ax1_project.pem" ec2-user@43.207.191.40

  3. 公開鍵の権限を変更します

    chmod 600 ~/.ssh/aws_ax1_project.pem

  4. パブリックインスタンスからパブリックインスタンスにssh接続します

    -Dオプションを使うことでパブリックインスタンスの1080番ポートを、リスニングポートとして有効にしています

    ssh localhost -D 1080 -i ~/.ssh/aws_ax1_project.pem

  5. パブリックインスタンスからプライベートインスタンスにssh接続します

    -Rオプションを使うことでプライベートインスタンスの2080番ポートをパブリックインスタンスの1080番ポートに転送しています

    ssh -R 2080:localhost:1080 ec2-user@10.0.139.136 -i ~/.ssh/aws_ax1_project.pem

  6. 確認用コマンドを実行して、成功しているかテストします

    curl http://ifconfig.io --proxy 'socks5h://localhost:2080'

    IPアドレスが出力されれば成功です

proxychains-ngの設定

socks5://127.0.0.1:2080を経由することで外部と通信できるようになりました

ただ、コマンド実行時に毎回proxyを指定するのは面倒です

そこで、proxychains-ngを導入して、ネットワークを利用するコマンドの通信がSOCKS/HTTPプロキシを経由するように設定します

proxychains-ngの手順

※プライベートサブネットにログインした状態で作業します

  1. 以下のコマンドを実行します(gccなどコンパイラーが必要です)

    cd /opt
    sudo curl --proxy socks5://127.0.0.1:2080 -O http://ftp.barfooze.de/pub/sabotage/tarballs/proxychains-ng-4.16.tar.xz
    sudo tar Jxvf ./proxychains-ng-4.16.tar.xz
    cd proxychains-ng-4.16
    sudo ./configure --prefix=/usr --sysconfdir=/etc
    make
    sudo make install
    
  2. sudo vim /etc/proxychains.confコマンドで/etc/proxychains.confを編集します

    以下の内容を書き込みます(:wqで保存)

    [ProxyList]
    socks5 127.0.0.1 2080
    
  3. sudo proxychains4 bashコマンドを実行します

  4. curl http://ifconfig.ioコマンドを実行して上手くできているかテストします

    IPアドレスが出力されれば成功です

補足 次から接続する時の手順

この記事の設定をした後にプライベートサブネットに接続するときは以下の手順を実行する必要があります

  1. ssh localhost -D 1080 -i ~/.ssh/aws_ax1_project.pem
  2. ssh -R 2080:localhost:1080 ec2-user@10.0.139.136 -i ~/.ssh/aws_ax1_project.pem
  3. sudo proxychains4 bash

参考情報

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?