我有一台Ubuntu的PC作为路由器。 它与互联网有一个公共IP的3G连接,并有一个私人无线子网。 所以它有两个活动接口:
随着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 > /file , sudo echo > /file不起作用,因为sudo只在echo函数上运行,而不是在> /file