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

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

ただいまの
回答率

90.51%

  • Linux

    3775questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • CentOS

    2708questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • SSH

    550questions

    SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

  • TCP

    163questions

    TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Virtual IPのファイアウォール設定について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,054

soich

score 147

困っていること

あるサーバにVirtual IP(VIP)を割り当てているのですが、
ポートを22番以外で接続しようとしても接続できません

環境

CentOS6.8 RedHat64bit
server1のIPアドレス:192.168.56.001 
server1に振っているVIPアドレス:192.168.56.100

試したこと

ssh接続すると接続することができます。

○sshで接続した場合

# 直接サーバのIPを指定して接続した場合
$ ssh root@192.168.56.001
Last login: Thu Jan 12 21:56:30 2017 from 192.168.56.111
[root@server1 ~]# 

# VIPを指定して接続した場合
$ ssh root@192.168.56.100
Last login: Thu Jan 12 21:56:30 2017 from 192.168.56.111
[root@server1 ~]# 

アプリを使用してVIPに接続したいので、ssh以外でも通るようにしたいのですが、その方法がわかりません。
ファイアウォールの設定かなと思っているのですが、そもそもVIPのファイアウォールってどうやって設定するんだってなっています。

telnetでVIP接続を確認した場合以下のようになりました。
接続したいポートは6379です(サーバIP(192.168.56.001)の場合はどちらのポートも問題なく接続できました)

○telnetで接続した場合

$ telnet 192.168.56.100 22
Trying 192.168.56.100...
Connected to 192.168.56.100.
Escape character is '^]'.

$ telnet 192.168.56.100 6379
Trying 192.168.56.100...
telnet: connect to address 192.168.56.100: Connection refused

どうかおたすけください…
ご回答よろしくお願い致しますmm

追記事項

VIPの設定した際のコマンドです(ifconfig一部伏せてます)

$ sudo ip addr add 192.168.56.100/24 broadcast 192.168.56.255 dev eth0 label eth0:0

$ ifconfig
eth0:0    Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:192.168.56.100  Bcast:192.168.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

○iptablesの設定(すみませんいろいろ設定してます)

$ vim /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Nov 16 14:24:13 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [31:3364]
-A INPUT -p tcp -m tcp --dport 6379 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 16379 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 26379 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 26380 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 26381 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Nov 16 14:24:13 2016
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • ynakano

    2017/01/13 12:20

    バーチャルIPをどのように付与したのかその設定についてと、iptablesの設定を追記していただけますか。

    キャンセル

  • soich

    2017/01/13 12:33

    依頼ありがとうございます!iptablesの設定とバーチャルIPの付与したコマンド追加いたしました!

    キャンセル

回答 2

checkベストアンサー

0

お示しのiptablesの設定で192.168.56.1に6379/tcpの疎通が取れるのか何とも言えませんが、6379/tcpで新規TCPセッションを張りたいのであれば、SSH同様に

-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT

としたらよいかと思います。

また、iptablesは記述の順番に沿って評価され、ACCEPTやDROPはルールにマッチしたら以降のルールは評価されなくなります。
そこも意識しておいた方が良いです。

もう1点言うと、"netstat -an | grep 6379"で6379/tcpがどのIPアドレスでLISTENしているかも確認する必要があります。
この点も原因になり得ます。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/13 13:21

    ご回答ありがとうございます!
    ```
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    ```
    のすぐ下に記述したのですが状況は変わりませんでした。
    上に定義していた6379の記述を削除してみましたが同じく変わらずです…

    また、netstatコマンドを打った結果はこちらでした
    ```
    # netstat -an | grep 6379
    tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
    tcp 0 0 192.168.56.001:6379 0.0.0.0:* LISTEN
    tcp 0 0 192.168.56.001:6379 192.168.56.003:43130 ESTABLISHED
    tcp 0 0 192.168.56.001:34185 192.168.56.002:6379 ESTABLISHED
    tcp 0 0 192.168.56.001:6379 192.168.56.003:43152 ESTABLISHED
    tcp 0 0 192.168.56.001:6379 192.168.56.003:43146 ESTABLISHED
    tcp 0 0 192.168.56.001:6379 192.168.56.003:43126 ESTABLISHED
    tcp 0 0 192.168.56.001:6379 192.168.56.003:43150 ESTABLISHED
    tcp 0 0 192.168.56.001:6379 192.168.56.003:43148 ESTABLISHED
    ```
    192.168.56.100の記述はないですね…
    ちなみに192.168.56.002と003は001のスレーブと監視用に使用しているサーバです

    試しに
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    の記述を外してみたのですがそうすると
    ```
    $ telnet 192.168.56.001 22
    Trying 192.168.56.001…
    telnet: connect to address 192.168.56.001: No route to host
    ```
    server1で直で接続を試みたところポート22に接続できなくなりました。
    やはりiptablesの設定だとは思うのですが、バーチャルIPでは別のところを見ているのかなーと思ったりする次第です…

    キャンセル

  • 2017/01/13 13:44

    順番を入れ替えてコメントしますね。

    > -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    > の記述を外してみたのですが

    これは正しい動作です。
    22/tcpへの新規TCPセッションを許可するルールが存在しなくなったので通信ができなくなっています。

    netstatの結果ですが、192.168.56.100で待ち受けているようには見えないです。
    6379/tcpということはRedisでしょうか、設定ファイルで0.0.0.0でLISTENするように設定するとどうなりますでしょうか。
    また、今までにiptablesを無効化した状態で2つのIPアドレスへの6379/tcp接続は試していますか?
    もし試していなければ、まずは両方のIPアドレスに確実に6379/tcp接続ができることを確認してからiptablesを有効化してみた方がよいかもしれません。
    何が阻害要因か一つ一つ切り分けた方がよいです。

    server1内部だけでなく、他ホストからのアクセスもしてみて確認するのもよいかと思います。

    キャンセル

  • 2017/01/13 19:11

    すみませんRedis側の設定だったようです…お気づきになってくださりありがとうございます。
    0.0.0.0にしたら内部&外部から接続することができました!
    ありがとうございます。

    Redis側で質問外になってしまうのですが…
    bind 0.0.0.0だとうまくいくのですが、できれば使用するIPのみ指定したいと思っています。
    redis.conf側で
    bind 192.168.56.001 127.0.0.1
    と設定していたのを
    bind 192.168.56.001 127.0.0.1 192.168.56.100
    にしようと思っていて、VIPは複数サーバにbindの「192.168.56.100」を追記して振り分けて使おうと考えています。
    しかしVIPが設定されていないサーバを起動した際に以下のエラーが出てしまい、うまく起動できません。

    Creating Server TCP listening socket 192.168.56.100:6379: bind: Cannot assign requested address

    もしご存知でしたら対応方法をご教授いただければと思いまして…
    よろしくお願い致します。

    キャンセル

  • 2017/01/13 20:57

    複数のサーバに(VIPとは言え)同一のIP(192.168.56.100)を付与する、という意図でしょうか。
    であればそれは不可能です。
    192.168.56.100でredisへのリクエストを待ち受け、それを複数のサーバに分散(ロードバランス)
    したいと言うことであれば、192.168.56.100のアドレスを持つロードバランサを構築する以外にないです。

    なお、お示しのエラーは「サーバに付与されていないIPアドレスでredisの待ち受けを試みようとした」という内容です。

    キャンセル

  • 2017/01/14 14:10

    不可能なんですか…いくらやってもできないわけですね;
    親身に回答していただきありがとうございました!
    ベストアンサーとさせていただきます。

    キャンセル

0

以下で対応出来ると思います。

1.以下の通り編集

#コメントアウト
#-A INPUT -p tcp -m tcp --dport 6379 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT

#以下を追加(--dport 22の下に)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT

2.iptablesのルールー再読込

$ sudo service iptables reload

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/14 14:12

    今回別の部分で原因があったようでした;
    ご回答いただきありがとうございましたmm

    キャンセル

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

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

関連した質問

同じタグがついた質問を見る

  • Linux

    3775questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • CentOS

    2708questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • SSH

    550questions

    SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

  • TCP

    163questions

    TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。