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文件里面,或者执行下面命令也可自动写入

bash 复制代码
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、开机时先自动执行一次

将下面命令添加到 防火墙-自定义规则 里面

bash 复制代码
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

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

bash 复制代码
iptables -t nat -nvL PREROUTING --line

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

bash 复制代码
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

bash 复制代码
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分钟执行一次

bash 复制代码
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

bash 复制代码
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.comtest2.x3322.net

bash 复制代码
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:重定向:将本机端口映射到本机的另一个端口

bash 复制代码
#查看规则所在nat表中链PREROUTING的行号
iptables -t nat -L PREROUTING -n --line-numbers
#删除所在nat表中链PREROUTING第[$Num]行规则
iptables -t nat -D PREROUTING [$Num]  #[$Num]指的是需要删除的num。删除规则后,下方的其他规则会补位,num会发生变更
相关推荐
方方怪42 分钟前
与IP网络规划相关的知识点
服务器·网络·tcp/ip
weixin_442643422 小时前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
阑梦清川2 小时前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
FeelTouch Labs3 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
长弓三石5 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
xianwu5435 小时前
反向代理模块
linux·开发语言·网络·git
follycat5 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全
xiaoxiongip6666 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
JaneJiazhao6 小时前
HTTPSOK:智能SSL证书管理的新选择
网络·网络协议·ssl
CXDNW6 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0