web-dev-qa-db-ja.com

iptablesおよび異なるネットワークインターフェイスを使用したMySQL接続の転送

私はルーターとしてUbuntuを搭載したPCを持っています。インターネットへのパブリックIPを使用した3G接続があり、プライベートワイヤレスサブネットがあります。したがって、2つのアクティブなインターフェイスがあります。

  • ppp0:パブリックIP(WAN)
  • wlan0:プライベートIP(LAN)

iptablesの場合すべてのMySQL接続を転送(ポート3306)をサブネットのローカルマシン(10.42.43.10)に転送します。

これらのiptablesコマンドを入力します。

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 3306 -j DNAT --to 10.42.43.10:3306
iptables -A FORWARD -p tcp -i ppp0 -o wlan0 -d 10.42.43.10 --dport 3306 -j ACCEPT

しかし、それは機能しません。 telnet publicip3306が失敗します:-(

どんな助けでもありがたいです。ありがとう!

3
Emilio Nicolás

接続を警告するためのsshトンネルを作成できます。 iptablesを使用するよりもはるかに簡単で安全です。

ssh -L YOUR_PUBLIC_IP:3306:10.42.43.10:3306 [email protected]

Sshユーザー資格情報を入力する必要があり、トンネルを介したリダイレクトが実行されます。高速、簡単、安全:)

1
Ivan Guardado

Nileshが投稿した回答にコメントできなかったので、その手順に従って問題が発生する可能性がある人のためにこれを追加しました

に関してで

echo 1 > /proc/sys/net/ipv4/ip_forward

これは、rootユーザーである場合にのみ機能します。

あなたshouldこのようにしてください

echo -n 1 | Sudo tee /proc/sys/net/ipv4/ip_forward

echo -nは、末尾の改行文字がないようにするためです

Sudo teeは、権限を増やしてファイルに書き込むことができるようにするためのものです

Sudo echo > /fileは、rootユーザーとして/ fileにアクセスする必要がある場合は機能しません。これは、Sudoがecho関数でのみ動作し、> /fileでは動作しないためです。

1
Jared Williams

ルールは正しいようです。カーネルでIP転送を有効にしていないと思います。 IP転送を有効にする方法は2つあります。

echo 1 > /proc/sys/net/ipv4/ip_forward

これは再起動時にリセットされます。次の行を/etc/sysctl.confに追加します。

net.ipv4.ip_forward = 1

そして、あなたはそれを機能させることができるはずです。

1
Nilesh