【问题标题】:iptables forward port over two eth cardsiptables 通过两个 eth 卡转发端口
【发布时间】:2016-03-28 15:01:27
【问题描述】:

我早上一直在互联网上寻找答案,但我无法让它工作。如果您能帮助我,我将不胜感激。

我的设置: 服务器: eth1:192.168.6.2(连接到互联网-> WAN) eth0:192.168.0.1(局域网)

本地计算机: 在端口 8848 上运行服务,使用 IP 号 192.168.0.3

一切都被 IPtables 封闭,所以大楼里的人无法访问本地 LAN (192.168.0.x),而 LAN 通过 eth1 使用互联网:

### Set Variables
IPTABLES='/sbin/iptables -v'
WAN='eth1'
LAN='eth0'

#EXTERNAL_INTERFACE=WAN
#EXTERNAL_IP=WAN_IP
WAN_IP=$( ifconfig $WAN | grep 'inet[^6]' | sed 's/[a-zA-Z:]//g' | awk '{print $1}' )
LAN_IP=$( ifconfig $LAN | grep 'inet[^6]' | sed 's/[a-zA-Z:]//g' | awk '{print $1}' )
echo '########################################################## NAT config WAN <=> LAN #'
$IPTABLES -t nat --append POSTROUTING --out-interface $WAN --jump MASQUERADE
$IPTABLES --append FORWARD --in-interface $WAN --out-interface $LAN -m state --state RELATED,ESTABLISHED --jump ACCEPT
$IPTABLES --append FORWARD --in-interface $LAN --out-interface $WAN --jump ACCEPT

echo '############################### Allow unlimited traffic on the loopback interface #'
$IPTABLES --append INPUT  --in-interface  lo   --jump ACCEPT
$IPTABLES --append OUTPUT --out-interface lo   --jump ACCEPT
$IPTABLES --append INPUT  --in-interface  $LAN --jump ACCEPT
$IPTABLES --append OUTPUT --out-interface $LAN --jump ACCEPT

echo '################################################ Allow unlimited outbound traffic #'
# Previously initiated and accepted exchanges bypass rule checking
$IPTABLES --append INPUT  -m state --state ESTABLISHED,RELATED     --jump ACCEPT
$IPTABLES --append OUTPUT -m state --state NEW,ESTABLISHED,RELATED --jump ACCEPT

服务器(LAN 192.168.0.1 和 WAN 192.168.6.2)运行 Apache,打开 WAN 可以正常工作(经过测试),我可以通过 192.168.6 范围内的 IP 号访问连接到 192.168.6.2 的网站.x:

$IPTABLES --append INPUT --proto tcp --source 0/0 --dport  80 -m state --state NEW --jump ACCEPT

所以我先打开了8848端口:

$IPTABLES --append INPUT --proto tcp --source 0/0 --dport 8848 -m state --state NEW --jump ACCEPT

然后我就卡住了。。我已经尝试了所有方法,但我找不到通过 192.168.6.2 访问 192.168.0.3 上的端口 8848 上的服务的解决方案(包含 FORWARD、PREROUTING、POSTROUTING、MASQUERADE、DNAT 的命令nat)

你能帮帮我吗?

[编辑] 要完成整个 bash 脚本,在设置 LAN 和 WAN 变量后,我会清理:

echo '####################################################################### clear all #'
$IPTABLES --flush
$IPTABLES --delete-chain
for TABLE in filter nat mangle; do
    $IPTABLES --table $TABLE --flush        # delete the table's rules
    $IPTABLES --table $TABLE --delete-chain # delete the table's chains
    $IPTABLES --table $TABLE --zero         # zero the table's counters
done

我的 bash 脚本的结尾是:

echo '############################################################ Set default policies #'
$IPTABLES --policy INPUT   DROP
$IPTABLES --policy OUTPUT  DROP
$IPTABLES --policy FORWARD ACCEPT

echo '########################### Have these rules take effect when iptables is started #'
/sbin/service iptables save
/sbin/service iptables restart`

[回答/解决方案]

感谢this page,我终于让它运行良好:

echo '################################################################# Port forwarding #'
FROM_PORT='8848'
TO_PORT='8848'
TO_IP='192.168.0.3'

$IPTABLES -t nat -A PREROUTING  -p tcp -d $WAN_IP --dport $FROM_PORT -j DNAT --to-destination $TO_IP:$TO_PORT
$IPTABLES -t nat -A POSTROUTING -p tcp -d $TO_IP  --dport $TO_PORT   -j SNAT --to-source $WAN_IP

【问题讨论】:

    标签: linux firewall iptables portforwarding


    【解决方案1】:

    试试这个:

    /sbin/iptables -t nat -I PREROUTING -i eth1 -d 192.168.6.2 -p tcp --dport 8848 -j DNAT --to-destination 192.168.0.3:8848

    现在您可以访问 192.168.6.2:8848 并且数据包将被发送/指定到同一端口上的 192.168.0.3。

    【讨论】:

    • 谢谢@Copche 的回答,我试过了,不高兴。也是 localy (192.168.0.x) 我可以通过以下方式查看服务:192.168.0.3:8848
    • 但是你让我想到了别的东西!我测试了我是否可以通过局域网中的其他计算机连接到 192.168.0.3:8848,结论是 Windows 防火墙阻止了外部连接!谢谢,它现在可以工作了,只需要你的一行!
    • 如果你能告诉我如何做同样的事情,而且从另一个端口(比如说 5432 WAN )到 8848 LAN,你会是我的英雄
    • 对于您的第二个示例,使用 /sbin/iptables -t nat -I PREROUTING -i eth1 -d 192.168.6.2 -p tcp --dport 5432 -j DNAT --to-destination 192.168.0.3:8848 并根据需要更改端口/IP。
    • 感谢 @joel-c 和 copche 帮助我。现在奇怪的事情..重新加载了我的 bash 脚本..现在它不再工作了??以前的测试有什么东西挥之不去吗?你们俩都觉得这一行就够了吗?
    猜你喜欢
    • 2013-06-27
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多