【问题标题】:Iptables forward over VPNiptables 通过 VPN 转发
【发布时间】:2013-10-17 06:25:54
【问题描述】:

我正在连接到 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。

这个配置有什么问题?

谢谢。

【问题讨论】:

    标签: linux iptables portforwarding


    【解决方案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/

    【讨论】:

    • 感谢您的回答。 ip_forward 已启用,我尝试使用您的 MASQUERADE 规则,但它也不起作用。您的 SSH 隧道解决方案听起来不错,但我的 SSH 端口已关闭,因此我无法实施该解决方案。
    • 如果可以建立VPN,之后应该可以通过VPN隧道进行SSH了。
    • 未知感谢您的时间和回答,最后我决定使用我之前发布的解决方案,但无论如何您的解决方案也很好。谢谢。
    【解决方案2】:

    最后我找到了Rinetd,它允许通过简单的配置进行 TCP 重定向。

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

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

    然后我运行 Rinetd:

     /usr/sbin/rinetd
    

    仅此而已。

    如果你想每次重启电脑都自动运行,可以在/etc/rc.local文件中添加前面的命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 2013-06-27
      • 2015-09-29
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      相关资源
      最近更新 更多