openwrt下,用iptable转发端口访问远程的SMB服务

首先初步学习一下iptales的命令

iptales指令的详细教程:https://blog.csdn.net/weixin_44390164/article/details/120500075

实践一、转发地址与端口

外网远程服务上开放了SMB服务,端口号自定义的为44513,WINDOWS不能直接访问,可以通过路由器上的转发功能来实现,但是远程服务又是动态IP地址,可以用以下方式来访问:

要想自动获取动态IP并转发,可以在/root/目录下面新建以下脚本文件,命名为www.test.com.sh

1、在/root/下面建立IP地址文件

将目标域名的IP地址手工写改入/root/www.test.com.IP文件里面,或者执行下面命令也可自动写入

echo $(ping www.test.com -c1 | grep PING | awk '{ print $3 }' | cut -c 2- | cut -d\) -f1)>/root/www.test.com.IP
cat /root/www.test.com.IP #查看是否写入成功

2、开机时先自动执行一次

将下面命令添加到 防火墙-自定义规则 里面
在这里插入图片描述

iptables -t nat -I PREROUTING -p tcp -d 192.168.6.1 --dport 445 -j DNAT --to $(cat /root/www.test.com.IP):44513


# 192.168.6.1为路由器地址,当访问路由器的445端口时,将会自动转换到远程域名对应的IP地址与端口上去
# www.test.com为域名
# 44513为远程SMB端口号

#iptables -t filter -I FORWARD 1 -p all -d $(cat /root/www.test.com.IP)  -j ACCEPT
#iptables -t filter -I FORWARD 1 -p all -d $(cat /root/test2.x3322.net.IP)  -j ACCEPT

重启后用命令查看一下结果

iptables -t nat -nvL PREROUTING --line

可以看到,第一条记录就是新增加上去的

root@OpenWrt:/tmp# iptables -t nat -nvL PREROUTING --line
Chain PREROUTING (policy ACCEPT 88500 packets, 15M bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.6.1          tcp dpt:445 to:113.65.5.52:44513
2    88500   15M prerouting_rule  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* !fw3: Custom prerouting rule chain */
3    88399   15M zone_lan_prerouting  all  --  br-lan *       0.0.0.0/0            0.0.0.0/0            /* !fw3 */
4        0     0 zone_wan_prerouting  all  --  eth0.2 *       0.0.0.0/0            0.0.0.0/0            /* !fw3 */
5      101  5232 zone_VPN_prerouting  all  --  pptp-vpn *       0.0.0.0/0            0.0.0.0/0            /* !fw3 */

3、建立脚本文件:www.test.com.sh

dyIP=$(ping www.test.com -c1 | grep PING | awk '{ print $3 }' | cut -c 2- | cut -d\) -f1)
if [ -z "$dyIP" ];then
        echo "get Ip false"
        exit
fi

file_content=$(cat www.test.com.IP)
echo "newIP="$dyIP
echo "lastIP="$file_content

if [ "$file_content" != "$dyIP" ];then
        echo "print new ip to text file"
        echo $dyIP>www.test.com.IP

        iptables -t nat -D PREROUTING 1
        iptables -t nat -I PREROUTING -p tcp -d 192.168.6.1 --dport 445 -j DNAT --to $dyIP:44513
#        iptables -t filter -D FORWARD 1
#        iptables -t filter -I FORWARD 1 -p all -d $dyIP  -j ACCEPT
else
        echo "no change!"
fi

4、添加实时任务,每5分钟执行一次

crontab -e
*/5 * * * * sh /root/www.test.com.sh
#*/5 * * * * sh /root/test2.x3322.net.sh

自此就可以自动转发了,随便远程IP怎么变化都可以正常访问SMB服务了。

实践二、控制终端访问情况

要想让MAC为:F8:4E:17:D7:E6:29的终端,在任何时间都可以通过WAN口访问124.229.32.179

iptables -t filter -I zone_lan_forward 3 -p all -d 124.229.32.179 -m mac --mac-source F8:4E:17:D7:E6:29 -j zone_wan_dest_ACCEPT
# -t filter 【表示指定filter表】
# -I zone_lan_forward 3 【插入自定义名的zone_lan_forward链 第三行,如果没有3,则默认插入到第一条】
# -p all 【匹配所有协议包括TCP\UDP等】
# -d 124.229.32.179  【匹配要访问的目标IP地址】
# -m mac --mac-source F8:4E:17:D7:E6:29 【匹配需要访问的终端MAC地址】
# -j zone_wan_dest_ACCEPT 【前面匹配成功后规则,最后指定动作--允许从WAN口访问】

#如果之前有记录的话,要先删除
iptables -t filter -D zone_lan_forward 3

让所有终端允许访问www.test.com 和 test2.x3322.net

iptables -t filter -I FORWARD 1 -p all -d 124.229.32.179  -j ACCEPT	#固定IP的例子

iptables -t filter -D FORWARD 1 #如果前面有写入的话, 需要删除
iptables -t filter -I FORWARD 1 -p all -d $(cat /root/www.test.com.IP)  -j ACCEPT  #www.test.com.IP文件由上面的脚本自动生成

iptables -t filter -D FORWARD 2 #如果前面有写入的话, 需要删除
iptables -t filter -I FORWARD 2 -p all -d $(cat /root/test2.x3322.net.IP)  -j ACCEPT   #test2.x3322.net.IP文件由上面的脚本自动生成

iptables -t filter -nvL FORWARD --line   #查看表链数据

以下是iptables一些其它选项的说明

-t :指定表
-I: 插入新规则(默认为1:插入到第一个) 与之对应的有 -A :新增一条规则,默认加在已存在的规则的最底端 PREROUTING:PREROUTING链在进行路由决定之前处理数据包,因此可以用来修改目标地址(DNAT)或源地址(SNAT)。iptables
-t nat -L PREROUTING:查看nat表PREROUTING链的规则
-p :对相应网络协议的包做规则限制如tcp、udp、icmp或all
-d:目标地址
–dport:目的端口
-j:对条件满足数据作出对应的动作(有ACCEPT,DROP,REJECT等下列可选项)
ACCEPT:接受
DROP:丢弃
REJECT:决绝
LOG:记录日志
SNAT:源地址转换
DNAT:目标地址转换
MASQUERADE:源地址动态转换为指定网卡上可用的IP地址
REDIRECT:重定向:将本机端口映射到本机的另一个端口

#查看规则所在nat表中链PREROUTING的行号
iptables -t nat -L PREROUTING -n --line-numbers
#删除所在nat表中链PREROUTING第[$Num]行规则
iptables -t nat -D PREROUTING [$Num]  #[$Num]指的是需要删除的num。删除规则后,下方的其他规则会补位,num会发生变更
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值