iptables转发两个eth卡上的端口

时间:2015-12-22 10:58:50

标签: linux firewall iptables portforwarding

我早上一直在网上寻找答案,但我无法上班。如果你能帮助我,我将不胜感激。

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

本地电脑: 在端口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

我用以下内容结束我的ba​​sh脚本:

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

1 个答案:

答案 0 :(得分:0)

试试这个:

/ 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。