我有一台装有 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