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

我有一台Ubuntu的PC作为路由器。 它与互联网有一个公共IP的3G连接,并有一个私人无线子网。 所以它有两个活动接口:

  • ppp0:公共IP(WAN)
  • wlan0:私有IP(LAN)

随着iptables我想转发每个MySQL连接 (端口3306)到本地机器(10.42.43.10)的子网。

我input这些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公开3306失败:-(

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

你可以创build一个ssh隧道来阻止连接。 这比使用iptables更简单,更安全:

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

你将不得不inputSSH用户凭证,并通过隧道redirect将完成。 快速,简单和安全:)

规则似乎是正确的。 我认为你没有在内核中启用IP转发。 有两种方法来启用IP转发:

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

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

 net.ipv4.ip_forward = 1 

你应该能够得到它的工作。

无法评论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是这样,你可以用更多的权限写入文件

如果需要以root用户身份访问sudo echo > /filesudo echo > /file不起作用,因为sudo只在echo函数上运行,而不是在> /file