2015-12-22 43 views
0

我一直在網上搜索一個答案早上,但我不能得到它的工作。如果你能幫助我,我將不勝感激。iptables轉發端口通過兩個eth卡

我的設置: 服務器: 的eth1:192.168.6.2(連接到互聯網 - > WAN) 爲eth0:192.168.0.1(LAN)

本地計算機: 運行在端口8848服務工作IP號192.168.0.3

一切都緊閉使用iptables,使人們在建設不能訪問本地局域網(192.168.0)和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 

服務器(局域網192.168.0.1和廣域網192.168.6.2)運行Apache,爲廣域網打開一個工作正常(測試),我可以訪問通過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 

然後我被卡住。我已經嘗試了一切,但我不能找到訪問端口8848的服務解決方案在192.168.0.3上通過192.168.6.2(包含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` 

[ANSWER/SOLUTION]

感謝this page我已經finaly了它強勁的工作:

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 

回答

0

試試這個:

/sbin目錄/ iptables的NAT -t -I PREROUTING -i eth1的-d 192.168.6.2 -p tcp的--dport 8848 -j DNAT - 到目的地192.168.0.3:8848

現在你可以訪問192.168.6.2:8848,數據包將在同一端口發送/命令到192.168.0.3。

+0

謝謝@Copche回答,我試過這個,沒有快樂。 也localy(192.168.0.x)我可以通過以下網址看到服務:https://192.168.0.3:8848/ –

+0

但你讓我想起了別的東西!我測試了是否可以通過LAN中的其他計算機連接到192.168.0.3:8848,結論是Windows防火牆阻止了外部連接!謝謝,它現在可以工作,只需你一行! –

+0

如果你能告訴我如何做同樣的事情,也可以從其他端口(可以說是5432 WAN)到8848 LAN –