iptables 转发端口到两个 eth 卡
iptables forward port over two eth cards
我整个早上都在互联网上搜索答案,但我无法让它工作。如果你能帮助我,我将不胜感激。
我的设置:
服务器:
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 }' )
LAN_IP=$( ifconfig $LAN | grep 'inet[^6]' | sed 's/[a-zA-Z:]//g' | awk '{print }' )
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 范围内的 IP 号码访问连接到 192.168.6.2 的网站.6.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
试试这个:
/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 并且数据包将在同一端口上 sent/nated 到 192.168.0.3。
我整个早上都在互联网上搜索答案,但我无法让它工作。如果你能帮助我,我将不胜感激。
我的设置: 服务器: 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 }' )
LAN_IP=$( ifconfig $LAN | grep 'inet[^6]' | sed 's/[a-zA-Z:]//g' | awk '{print }' )
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 范围内的 IP 号码访问连接到 192.168.6.2 的网站.6.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
试试这个:
/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 并且数据包将在同一端口上 sent/nated 到 192.168.0.3。