
KVM 仮想マシンを備えた Ubuntu サーバーがあります。
ファイアウォールで SSH を許可して、ホストにアクセスできるようにしました。また、状態に関連した確立済みの着信トラフィックも許可しました。
これはホストの完全な iptables 設定です。
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- [MYIP] anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- [MYIP] [VSERVER IP] to:192.168.122.122
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
仮想サーバーは Windows で実行され、ローカル IP を持ちます。192.168.122.122
でわかるようにPREROUTING
、すべてのポートで自分だけがアクセスできるように設定されています。
リモート デスクトップは正常に動作し、外部 IP ([VSERVER IP]) を使用してサーバーに接続できました。サーバーに接続したら、Internet Explorer を開いて stackoverflow.com と入力してみました。動作し、ページが表示されます。
.NET MySql.Data.dll
しかし、他のサーバーにクエリを実行する単純なMySQLプログラム(を使用)を実行すると、次のエラーで失敗します。
MySql.Data.MySqlClient.MySqlException (0x800004005):
Unable to connect to any of the specified MySQL hosts.
それはなぜでしょうか? どの Web サーバーへの HTTP リクエストも問題なかったのに、なぜ MySQL クエリでは問題になるのでしょうか?
ちなみに、外部の Mysql サーバーはリクエストをドロップしていません (ファイアウォールが一時的に無効になっています)。iptables に何か問題があるはずですが、それが何なのかはわかりません。
この問題を解決するにはどうすればいいでしょうか?
答え1
残念ながら、私の (外部) MySQL ホストのファイアウォールに、私が知らなかったエラーが発生しました。結局、vServer の IP の MySQL ポートがブロックされていたため、リクエストが返されず、HTTP リクエストは機能していました。
問題は解決されました。
常にすべてのファイアウォールを再確認してください。教訓を得ました。