質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.01%

1つの仮想サーバ上のSQUIDでの複数IP運用について

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 5,806

chapter

score 34

いつもお世話になっております。

現在、GMO ALTUSにて1つの仮想サーバにSQUIDを導入して
プロキシサーバとして稼働させています。

CentOS 6.4
SQUID 3.1.23

1つのグローバルIPで稼働させていた時は特に問題なく
利用できていたのですが、
このたび複数IPでの運用をしたいと思い、
試行錯誤している状態です。

GMO ALTUS上で、1つの仮想サーバに対して複数IPを割り当てる
方法については、GMOのサイトに記載されていた方法にしたがって、
セカンダリーIPアドレスを追加して、そのローカルIPに対して、
新たに追加したグローバルIPでNATの有効化まで完了しました。

https://support.gmocloud.com/pf/guide/basic/console/nat.html
https://support.gmocloud.com/pf/guide/basic/useful/ip.html

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 06:81:84:00:21:24 brd ff:ff:ff:ff:ff:ff
    inet 172.31.28.67/21 brd 172.31.31.255 scope global eth0
    inet 172.31.26.135/20 brd 172.31.31.255 scope global eth0:0
    inet6 fe80::481:84ff:fe00:2124/64 scope link
       valid_lft forever preferred_lft forever

この後、SQUIDで複数IPで運用する方法について、調べた結果として、
試したのが以下になります。

$ vi /etc/squid/squid.conf

# ポートのLISTENにローカルIPを設定
http_port 172.31.28.67:80
http_port 172.31.26.135:80

# aclを記述
acl ip1 myip 172.31.28.67/24
acl ip2 myip 172.31.26.135/24

# outgoingアドレスでグローバルIPを設定
tcp_outgoing_address XXX.XXX.XXX.XX1 ip1
tcp_outgoing_address XXX.XXX.XXX.XX2 ip2

また、「dns_nameservers」の設定も必要という情報があったので、
/etc/resolv.conf に記述されていたIPアドレスを記述しました。

上記を設定した後、SQUIDを再起動させたところ、
起動自体は問題なく完了しました。

しかしながら、プロキシサーバとして接続を試みたところ、
両方のIPアドレスともに以下のようなエラーが発生してしまいました。

ERROR
The requested URL could not be retrieved

The following error was encountered while trying to retrieve the URL: http://www.cybersyndrome.net/env.cgi

ソケット作成に失敗

システムが以下のエラーを返しました: (99) Cannot assign requested address

おそらく過大な負荷のため、SquidはTCPソケットを作成できませんでした。再度リクエストしてください。

SQUIDの複数IPでの運用というよりも、別なエラーのようにも思えるので
直接上記のエラーに関するタイトルで質問した方がよいかも知れず、
現在のこのタイトルでの質問で適切か自信がなかったのですが、

1つのIPでの運用時は特に問題はなく、設定を戻してみると正常に繋がるので、
複数IPでの運用のために追加した設定に何らかの不備があると思い、
今回のタイトルで質問させていただきました。

複数IPでの運用方法や上記のエラーに関して、何か解決のヒントになるようなことが
ございましたら、ご教授いただけると助かります。

それでは、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

tcp_outgoing_address はグローバルIPアドレスではなく、サーバーが持っているローカルIPアドレスにしないと bind できないのでダメだと思います。
インターネットに出て行くときに、GMO 側でローカルIPアドレスをグローバルIPアドレスに変換してくれるはずです。

また、エラーとは関係ないですが、acl ip1 myipacl ip2 myip と ip a で、ネットワークプレフィックスが合っていません。
ip a に合わせて 172.31.28.67/21172.31.26.135/20 とするか、172.31.28.67/32172.31.26.135/32 でもいいと思います。

(2016/05/30 10:28 追記) ネットワークの問題切り分け

outbound (ip2からインターネット)
サーバー内から telnet, wget, curl, nmap などのコマンド(どれか 1つ)で Source address に ip2 を指定してインターネットに接続できるか確認します。

# telnet -b 172.31.26.135 www.google.com 80
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.0    (←入力後、リターン 2回)

HTTP/1.0 302 Found    (←応答が返ればOK)
(略)

# wget --bind-address 172.31.26.135 http://www.google.com/
  (index.html がダウンロードできればOK)

# curl --interface eth0:0 http://www.google.com/
  (応答があればOK)

# nmap -S 172.31.26.135 -e eth0 -Pn -sT -p 80 www.google.com
  (「80/tcp open  http」であればOK)

inbound (インターネットからip2)

  • インターネットから ip2(のグローバルIPアドレス)に ping で接続できるか
  • telnet コマンドなどが利用できる場合、インターネットから ip2 のプロキシーポートに接続できるか
> telnet (ip2のグローバルIPアドレス) 80
GET http://www.google.com/ HTTP/1.0    (←入力後、リターン 2回)
  • インターネットから ip2(のグローバルIPアドレス)の他のサービス(sshd など)に接続できるか

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/30 14:46

    最初の質問時点では、inbound ping および 80番ポートへ接続できていたようですが、現時点では inbound ping のみですね。
    GMO ALTUS 側の設定に原因があると思うのですが、私にはわかりません。

    outbound について、telnet で失敗、squidclient で成功は矛盾しています。
    おそらく、squid.conf の acl ip1/ip2 myip のネットマスクを「/32」にしないと、両方 ip1 になってしまい、tcp_outgoing_address 172.31.28.67 ip1 で通信しているのだと思います。
    前言撤回となってしまい申し訳ありませんが、acl ip1/ip2 myip のネットマスクは「/32」が正しいです。

    キャンセル

  • 2016/05/31 00:07

    TaichiYanagiyaさん、ご返信ありがとうございます。

    ネットマスクを「/32」にしたところ、squidclient でも成功しなくなりましたので、
    outboundはどれもダメのようですね。

    お陰さまで問題の切り分けがかなりできてきましたので、
    GMOの技術サポートの方に問い合わせフォームから

    これまで設定した内容を伝えた上で、セカンダリIPに割り当てたグローバルIPで
    インターネットと接続するために、ネットワーク関連の設定で漏れがないか
    確認しているところです。

    解決策が分かるかどうかは不明ですが、また進捗がありましたらこちらに
    追記させていただきますので、勝手ながら今しばらくはこちらの質問は
    クローズさせないでおきます。

    たくさんのお時間とお手間をとっていただき、ありがとうございました。

    キャンセル

  • 2016/05/31 13:52

    TaichiYanagiyaさん、こんにちは。

    その後の結果をご報告いたします。

    GMO ALTUSでセカンダリIPアドレスを追加した場合、
    初回は仮想サーバーの再起動ではなく、コンソールからの停止・起動を
    行わないと、正しい情報が反映されない仕様ということでした。

    内部ファイル作成の問題で、現状ではサービス上の仕様とのことです。

    お恥ずかしながらあまり重要視していませんでしたが、
    今後はサーバの設定変更した場合は、再起動ではなく
    停止・起動で対処しようと思います。


    今回の大元の原因はGMOの仕様上、セカンダリIPの追加時には
    サーバの停止・起動を行わないと正常に反映されないということでしたが、

    それ以外にも当初はSQUIDの設定ファイルの記述方法も間違っていたので、
    そちらの修正について教えていただいたことと、
    SQUIDとGMO側の問題の切り分けについてアドバイスいただいたことで
    無事に解決できました。

    本当にありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる