linux下啟用組播轉發的方法與一些常用狀態檢查命令


 總所周知,Linux 服務器是可以作為一台路由器使用,不僅僅是可以轉發單播數據包,同事也可以轉發組播數據包.但是多數同學卻不知道如何配置.本文將介紹將Linux配置成組播轉發路由器的方法做一個分享.

目錄

手工開啟

1.開啟轉發開關

2.在需要開啟組播轉發的接口上打開組播轉發開關.

3.手工配置靜態組播路由.

4.配置iptables,放行組播轉發報文

使用pimd工具動態配置組播路由和igmp成員發現

1.開啟轉發開關

2.下載安裝pimd

3.配置pimd的配置文件並啟動pimd

4.配置iptables,放行組播轉發報文

 組播轉發配置的常用命令:

查看系統配置:

查看當前生效的組播路由:

查看 pimd 的 debug 日志,以觀察各種事件

抓包查看igmp\pim\具體組播報文



手工開啟


1.開啟轉發開關

     和ip單播一樣,首先需要打開系統的ipv4轉發開關.

[root@dap1:/home/vap]# echo 1 > /proc/sys/net/ipv4/ip_forward

2.在需要開啟組播轉發的接口上打開組播轉發開關.

    以下示例是打開所有接口的組播轉發開關.

  1.  
    [root@dap1 :/home/vap]# cat /proc/sys/net/ipv4/conf/
  2.  
    all/ docker 0/ enp62s0f0/ lo/ veth28802fc/ vethbb97ad5/
  3.  
    default/ enp134s 0/ enp62s0f1/ veth1811b4c/ veth43493c1/
  4.  
     
  5.  
    [root@dap1 :/home/vap]# echo 1 > /proc/sys/net/ipv4/conf/all/mc_forwarding
  6.  
     

    以下為打開docker0接口的組播轉發開關.

[root@dap1:/home/vap]# echo 1 > /proc/sys/net/ipv4/conf/docker0/mc_forwarding 

可以依照例子手工一次打開各參與組播路由轉發的接口開關.

3.手工配置靜態組播路由.

以下示例增加了2條靜態的組播路由

  1.  
    [root@dap1 :/home/vap]# ip route add 224.0.16.0/24 dev docker0
  2.  
     
  3.  
    [root@dap1 :/home/vap]# ip route add from 12.23.24.15 to 224.0.18.0/24 dev docker0
  4.  
    [root@dap1 :/home/vap]# ip route
  5.  
    default via 10.46.169.1 dev enp134s0 onlink
  6.  
    10.46.169.0/24 dev enp134s0 proto kernel scope link src 10.46.169.239
  7.  
    172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
  8.  
    224.0.16.0/24 dev docker0 scope link
  9.  
    224.0.18.0/24 dev docker0 scope link
  10.  
    238.97.1.144 dev docker0 scope link

4.配置iptables,放行組播轉發報文

首先檢查iptables 的 filter 表的 FORWARD 鏈的默認策略和實際規則,如果發現被阻斷的情況需要根據實際情況放通規則.

注意下圖中 Chain FORWARD (policy ACCEPT .....),該ACCEPT標識了這條鏈的默認規則為ACCEPT.
 

  1.  
    [root@dap1 :/home/vap]# iptables -t filter -nvL
  2.  
    Chain INPUT (policy ACCEPT 23306 packets, 3074K bytes)
  3.  
    pkts bytes target prot opt in out source destination
  4.  
    481K 108M f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
  5.  
     
  6.  
    Chain FORWARD (policy ACCEPT 194K packets, 278M bytes)
  7.  
    pkts bytes target prot opt in out source destination
  8.  
    6544K 11G DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
  9.  
    6544K 11G DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
  10.  
    2262K 1036M ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
  11.  
    1295K 1806M DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
  12.  
    2987K 8295M ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
  13.  
    1533 61320 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
  14.  
     
  15.  
    Chain OUTPUT (policy ACCEPT 188K packets, 201M bytes)
  16.  
    pkts bytes target prot opt in out source destination

如果有實際需要控制的轉發策略時,可以將默認設置為DROP,然后添加具體的ACCEPT規則.

如果沒有進一步的需求,則可以直接將默認規則設置為ACCEPT.

設置默認規則的命令如下:

[root@dap1:/home/vap]# iptables -t filter -P FORWARD ACCEPT

使用pimd工具動態配置組播路由和igmp成員發現


1.開啟轉發開關

     和ip單播一樣,首先需要打開系統的ipv4轉發開關.

[root@dap1:/home/vap]# echo 1 > /proc/sys/net/ipv4/ip_forward

2.下載安裝pimd

例如 centos 上可以使用 yum 直接安裝 pimd ,也可以到 github 下載源碼包編譯安裝.

[vap@dap1~]#yum install pimd

如何編譯安裝這個請自行查看幫助文檔.源碼包的 github 連接如下:

https://github.com/troglobit/pimd/releases

3.配置pimd的配置文件並啟動pimd

使用 man pimd 可以查看 pimd 的手冊.

配置文件一般放置在  /etc/pimd.conf. 默認是開啟所有端口的 pim 和 igmp .正常初步使用的話直接使用 pimd 命令啟動即可.

[vap@dap1:~]pimd

查看 pimd 的當前路由表情況:

  1.  
    [vap@dap1:~]$ pimd --show-routes
  2.  
    pimd: Failed removing /var/run/pimd/pimd.dump, may be showing stale information: Permission denied
  3.  
    Virtual Interface Table ======================================================
  4.  
    Vif Local Address Subnet Thresh Flags Neighbors
  5.  
    --- --------------- ------------------ ------ --------- -----------------
  6.  
    0 10.46.169.239 10.46.169/24 1 DR NO-NBR
  7.  
    1 172.17.0.1 172.17 1 DR NO-NBR
  8.  
    2 10.46.169.239 register_vif0 1
  9.  
     
  10.  
    Vif SSM Group Sources
  11.  
     
  12.  
    Multicast Routing Table ======================================================
  13.  
    ----------------------------------- (*,G) ------------------------------------
  14.  
    Source Group RP Address Flags
  15.  
    --------------- --------------- --------------- ---------------------------
  16.  
    INADDR_ANY 224.0.75.75 172.17.0.1 WC RP
  17.  
    Joined oifs: ...
  18.  
    Pruned oifs: ...
  19.  
    Leaves oifs: l..
  20.  
    Asserted oifs: ...
  21.  
    Outgoing oifs: o..
  22.  
    Incoming : ..I
  23.  
     
  24.  
    TIMERS: Entry JP RS Assert VIFS: 0 1 2
  25.  
    0 10 0 0 0 0 0
  26.  
    ----------------------------------- (S,G) ------------------------------------
  27.  
    ----------------------------------- (*,G) ------------------------------------
  28.  
    Source Group RP Address Flags
  29.  
    --------------- --------------- --------------- ---------------------------
  30.  
    INADDR_ANY 238.97.1.144 172.17.0.1 WC RP
  31.  
    Joined oifs: ...
  32.  
    Pruned oifs: ...
  33.  
    Leaves oifs: .l.
  34.  
    Asserted oifs: ...
  35.  
    Outgoing oifs: .o.
  36.  
    Incoming : ..I
  37.  
     
  38.  
    TIMERS: Entry JP RS Assert VIFS: 0 1 2
  39.  
    0 55 0 0 0 0 0
  40.  
    ----------------------------------- (S,G) ------------------------------------
  41.  
    --------------------------------- (*,*,G) ------------------------------------
  42.  
    Number of Groups: 2
  43.  
    Number of Cache MIRRORs: 0
  44.  
    ------------------------------------------------------------------------------

4.配置iptables,放行組播轉發報文

首先檢查iptables 的 filter 表的 FORWARD 鏈的默認策略和實際規則,如果發現被阻斷的情況需要根據實際情況放通規則.

注意下圖中 Chain FORWARD (policy ACCEPT .....),該ACCEPT標識了這條鏈的默認規則為ACCEPT.
 

  1.  
    [root@dap1 :/home/vap]# iptables -t filter -nvL
  2.  
    Chain INPUT (policy ACCEPT 23306 packets, 3074K bytes)
  3.  
    pkts bytes target prot opt in out source destination
  4.  
    481K 108M f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
  5.  
     
  6.  
    Chain FORWARD (policy ACCEPT 194K packets, 278M bytes)
  7.  
    pkts bytes target prot opt in out source destination
  8.  
    6544K 11G DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
  9.  
    6544K 11G DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
  10.  
    2262K 1036M ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
  11.  
    1295K 1806M DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
  12.  
    2987K 8295M ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
  13.  
    1533 61320 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
  14.  
     
  15.  
    Chain OUTPUT (policy ACCEPT 188K packets, 201M bytes)
  16.  
    pkts bytes target prot opt in out source destination

如果有實際需要控制的轉發策略時,可以將默認設置為DROP,然后添加具體的ACCEPT規則.

如果沒有進一步的需求,則可以直接將默認規則設置為ACCEPT.

設置默認規則的命令如下:

[root@dap1:/home/vap]# iptables -t filter -P FORWARD ACCEPT

 組播轉發配置的常用命令:

查看系統配置:

sysctl -a | grep mc

sysctl -a | grep forward

查看當前生效的組播路由:

ip mroute show

查看 pimd 的 debug 日志,以觀察各種事件

pimd --debug=xxx

xxx是 pimd 支持的各種 debug 級別,具體可以查看 pimd --help

抓包查看igmp\pim\具體組播報文

tcpdump -ennvi 接口名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM