使用 iptables 和不同的网络接口转发 MySQL 连接

使用 iptables 和不同的网络接口转发 MySQL 连接

我有一台装有 Ubuntu 的 PC 作为路由器。它有一个 3G 连接,使用公共 IP 连接到互联网,并且有一个私有无线子网。因此它有两个活动接口:

  • ppp0:公网 IP(WAN)
  • wlan0:私有IP(局域网)

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 publicip 3306 失败:-(

任何帮助都将不胜感激。谢谢!

答案1

您可以创建一个 ssh 隧道来转发连接。它比使用 iptables 更简单、更安全:

ssh -L 你的公共IP:3306:10.42.43.10:3306[电子邮件保护]

您必须输入 ssh 用户凭据,然后通过隧道进行重定向。快速、简单且安全 :)

答案2

规则似乎正确。我认为您没有在内核中启用 IP 转发。有两种方法可以启用 IP 转发:

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

这将在重启时重置。将以下行添加到 /etc/sysctl.conf:

net.ipv4.ip_forward = 1

你应该能够让它工作起来。

答案3

无法对 Nilesh 发布的答案发表评论,因此我为可能在执行该步骤时遇到问题的人添加了此内容

关于

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

这仅当您是 root 用户时才有效。

应该这样做

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

echo -n所以没有尾随换行符

sudo tee这样您就可以使用更高的权限写入文件

sudo echo > /file如果需要以 root 用户身份访问 /file,则不起作用,因为 sudo 仅对echo函数进行操作,而不是> /file

相关内容