Iptables通过VPN转发

时间:2013-10-17 06:25:55

标签: linux iptables portforwarding

我正在使用Windows中的VPN连接到使用静态IP的远程计算机(Linux)。从这台远程计算机,我可以访问不同的机器(数据库,svn等)。

我正在尝试将远程计算机设置为从Windows计算机访问数据库,svn服务器等,因为在远程连接上工作非常慢。

所以我尝试了/etc/rc.local中的下一行,但它不起作用:

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d B1.B2.B3.B4 --dport 89 -j DNAT --to R1.R2.R3.R4:89
/sbin/iptables -A FORWARD -p tcp -d R1.R2.R3.R4 --dport 89 -j ACCEPT

B1.B2.B3.B4是我的远程数据库IP,89是我们用来访问数据库的端口,R1.R2.R3.R4是我的远程机器IP。

此配置有什么问题?

感谢。

2 个答案:

答案 0 :(得分:1)

确保ip_forward已启用:

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

此外,您需要确保VPN在连接时将B1.B2.B3.B4的路由推送到您的Windows机器;如果没有,你将不得不自己添加路线。

我认为MASQUERADE规则应该足够了,但是这样写:

iptables -t nat -A POSTROUTING -s WINDOWS_BOX_VPN_IP -j MASQUERADE

但是如果你不想弄乱iptables,你可以使用SSH来设置到你的远程服务的隧道(你需要一些可以创建隧道的Windows SSH客户端,我给出了一个如何运行的例子)这来自一个linux盒子):

ssh user@R1.R2.R3.R4 -L 8989:B1.B2.B3.B4:89

这会在localhost:8989上创建一个隧道,它会将连接转发到B1.B2.B3.B4:89(查找“本地端口转发”,http://chamibuddhika.wordpress.com/2012/03/21/ssh-tunnelling-explained/

答案 1 :(得分:0)

最后,我发现Rinetd允许TCP重定向,配置简单。

根据我的问题,我必须在/etc/rinetd.conf中添加的配置是:

 R1.R2.R3.R4 89 B1.B2.B3.B4 89

然后我运行Rinetd:

 /usr/sbin/rinetd

就是这样。

如果您想在每次重新启动计算机时自动运行它,可以先在文件/etc/rc.local

中添加命令