天天看點

26-Openwrt 端口轉發 dmz upnp

我們經常會在路由器上面配置端口轉發的規則,用來通路内網機器的某個端口,openwrt上面有很多中實作端口轉發的方式。

1、端口轉發

比如我想用wan口的IP,192.168.2.180,遠端連接配接lan口内網192.168.18.235的ubuntu,如何實作:

  • 建立一個端口轉發規則,将

    2222端口,通路路由器内網192.168.18.235ubuntu的22端口,

在防火牆下面添加如下規則​

​cat /etc/config/firewall​

config redirect
    option enabled '1'
    option proto 'tcp'
    option comment 'ubuntu'
    option src_dport '2222'
    option dest_ip '192.168.18.235'
    option dest_port '22'
    option src 'wan'
    option target 'DNAT'
    option dest 'lan'      

實際實作在iptable的nat表下面添加了如下規則

root@openwrt:/# iptables -t nat -nvL | grep 235
  307 23589 zone_lan_prerouting  all  --  br-lan *       0.0.0.0/0            0.0.0.0/0           
    0     0 SNAT       tcp  --  *      *       192.168.18.0/24      192.168.18.235       tcp dpt:22 /* @redirect[0] (reflection) */ to:192.168.18.1
  307 23589 prerouting_lan_rule  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* user chain for prerouting */
    0     0 DNAT       tcp  --  *      *       192.168.18.0/24      192.168.2.180        tcp dpt:2222 /* @redirect[0] (reflection) */ to:192.168.18.235:22
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:2222 /* @redirect[0] */ to:192.168.18.235:22      

這樣通過wan ip加src_dport就可以通路到内網機器的ssh端口了。

2、DMZ

dmz就是加強版的端口轉發,比如你内網IP裡面有22端口給ssh用,也有80端口給web用,也有23端口給telnet用。如果用端口轉發的話,你需要建立三條端口轉發的規則。用dmz的話一下子就都可以了。

在防火牆下面添加如下規則​

​cat /etc/config/firewall​

config redirect 'dmz'
        option name 'dmz'
        option src 'wan'
        option proto 'tcp'
        option target 'DNAT'
        option dest_ip '192.168.18.235'
        option enabled '1'

config redirect 'dmzudp'
        option name 'dmzudp'
        option src_port '!67'
        option src 'wan'
        option proto 'udp'
        option target 'DNAT'
        option dest_ip '192.168.18.235'
        option enabled '1'      

實際實作在iptable的nat表下面添加了如下規則

root@openwrt:/# iptables -t nat -nvL | grep 235
    0     0 SNAT       tcp  --  *      *       192.168.18.0/24      192.168.18.235       /* dmz (reflection) */ to:192.168.18.1
    0     0 SNAT       udp  --  *      *       192.168.18.0/24      192.168.18.235       /* dmzudp (reflection) */ to:192.168.18.1
    0     0 DNAT       tcp  --  *      *       192.168.18.0/24      192.168.2.180        /* dmz (reflection) */ to:192.168.18.235
    0     0 DNAT       udp  --  *      *       192.168.18.0/24      192.168.2.180        /* dmzudp (reflection) */ to:192.168.18.235
    5   405 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* dmz */ to:192.168.18.235
   26  2270 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp spt:!67 /* dmzudp */ to:192.168.18.23      

3、Upnp

openwrt上面使用miniupnpd服務來實作upnp服務

root@zihome:# ps | grep mini
25503 root      1076 S    /usr/sbin/miniupnpd -f /var/etc/miniupnpd.conf
28450 root      1520 S    grep mini      

/etc/config/upnpd裡面的log_output設定成1,可以在logread下檢視互動日志。

config upnpd 'config'
        option enable_natpmp '1'
        option enable_upnp '1'
        option secure_mode '1'
        option log_output '1'      
開啟upnp的時候:
打開控制台->網絡和 Internet->檢視網絡計算機和裝置,可以看到路由器

右鍵檢視屬性可以看到路由器的資訊

  • 制造商
  • 型号
  • 裝置網頁
  • mac位址
  • 唯一辨別符
  • IP位址

抓包可以看到路由器發送SSDP廣播包給239.255.255.250,NOTIFY消息内容包含上面資訊。

關閉upnp的時候:
打開控制台->網絡和 Internet->檢視網絡計算機和裝置,路由器丢失

抓包可以看到路由器發送SSDP廣播包給239.255.255.250,NOTIFY消息内容被byebye。

upnp實作端口映射

upnp可以通過另一種方式實作端口映射,就是用戶端告訴路由器說,我想要通過哪個端口應該到哪個端口,然後路由器幫忙建立端口轉發規則。

ubuntu安裝upnpc

sudo apt-get install -y miniupnpc      

ubuntu的ssh添加2222端口,upnp預設隻允許1024-65535端口的映射

config perm_rule
    option action 'allow'
    option ext_ports '1024-65535'
    option int_addr '0.0.0.0/0'
    option int_ports '1024-65535'
    option comment 'Allow high ports      

sudo vim /etc/ssh/sshd_config

Port 22
Port 2222      

sudo /etc/init.d/ssh restart

ubuntu 通過upnpc請求添加端口映射,2222内部端口,9000外部端口

upnpc -a 192.168.17.233 2222 9000 TCP      

這時候在upnp.leases下面就會添加一條資訊,iptable -t nat下面添加一條規則。完成端口映射

root@openwrt:/# cat /var/upnp.leases 
TCP:9000:192.168.17.233:2222:1655716845:libminiupnpc      
upnpc -d 192.168.17.233 2222 9000 TCP      
當開啟迅雷下載下傳的時候
root@openwrt:/# cat /var/upnp.leases 
TCP:54366:192.168.17.151:53533:1655706396:PTL-000C29A6B88AGXGA
UDP:54366:192.168.17.151:54366:1655706396:PTL-000C29A6B88AGXGA
TCP:53532:192.168.17.151:53532:1655706396:PTL-000C29A6B88AGXGA


root@openwrt:/# iptables -t nat -nvL

Chain MINIUPNPD (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:63016 to:192.168.17.151:53866
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:63016 to:192.168.17.151:63016
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53864 to:192.168.17.151:53864