linux下启用组播转发的方法与一些常用状态检查命令 [操作系统入门]

编程

 总所周知,Linux 服务器是可以作为一台路由器使用,不仅仅是可以转发单播数据包,同事也可以转发组播数据包.但是多数同学却不知道如何配置.本文将介绍将Linux配置成组播转发路由器的方法做一个分享.

目录

手工开启

1.开启转发开关

2.在需要开启组播转发的接口上打开组播转发开关.

3.手工配置静态组播路由.

4.配置iptables,放行组播转发报文

使用pimd工具动态配置组播路由和igmp成员发现

1.开启转发开关

2.下载安装pimd

3.配置pimd的配置文件并启动pimd

4.配置iptables,放行组播转发报文

 组播转发配置的常用命令:

查看系统配置:

查看当前生效的组播路由:

查看 pimd 的 debug 日志,以观察各种事件

抓包查看igmppim具体组播报文



手工开启


1.开启转发开关

     和ip单播一样,首先需要打开系统的ipv4转发开关.

[[email protected]:/home/vap]# echo 1 > /proc/sys/net/ipv4/ip_forward

2.在需要开启组播转发的接口上打开组播转发开关.

    以下示例是打开所有接口的组播转发开关.

  1.  

    [[email protected]:/home/vap]# cat /proc/sys/net/ipv4/conf/

  2.  

    all/ docker0/ enp62s0f0/ lo/ veth28802fc/ vethbb97ad5/

  3.  

    default/ enp134s0/ enp62s0f1/ veth1811b4c/ veth43493c1/

  4.  

     

  5.  

    [[email protected]:/home/vap]# echo 1 > /proc/sys/net/ipv4/conf/all/mc_forwarding

  6.  

     

    以下为打开docker0接口的组播转发开关.

[[email protected]:/home/vap]# echo 1 >  /proc/sys/net/ipv4/conf/docker0/mc_forwarding

可以依照例子手工一次打开各参与组播路由转发的接口开关.

3.手工配置静态组播路由.

以下示例增加了2条静态的组播路由

  1.  

    [[email protected]:/home/vap]# ip route add 224.0.16.0/24 dev docker0

  2.  

     

  3.  

    [[email protected]:/home/vap]# ip route add from 12.23.24.15 to 224.0.18.0/24 dev docker0

  4.  

    [[email protected]:/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.  

    [[email protected]:/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.

设置默认规则的命令如下:

[[email protected]:/home/vap]# iptables -t filter -P FORWARD ACCEPT


使用pimd工具动态配置组播路由和igmp成员发现


1.开启转发开关

     和ip单播一样,首先需要打开系统的ipv4转发开关.

[[email protected]:/home/vap]# echo 1 > /proc/sys/net/ipv4/ip_forward

2.下载安装pimd

例如 centos 上可以使用 yum 直接安装 pimd ,也可以到 github 下载源码包编译安装.

[[email protected]~]#yum install pimd

如何编译安装这个请自行查看帮助文档.源码包的 github 连接如下:

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

3.配置pimd的配置文件并启动pimd

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

配置文件一般放置在  /etc/pimd.conf. 默认是开启所有端口的 pim 和 igmp .正常初步使用的话直接使用 pimd 命令启动即可.

[[email protected]:~]pimd

查看 pimd 的当前路由表情况:

  1.  

    [[email protected]:~]$ 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.  

    [[email protected]:/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.

设置默认规则的命令如下:

[[email protected]:/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

抓包查看igmppim具体组播报文

tcpdump -ennvi 接口名

linux下启用组播转发的方法与一些常用状态检查命令

以上是 linux下启用组播转发的方法与一些常用状态检查命令 [操作系统入门] 的全部内容, 来源链接: utcz.com/z/518818.html

回到顶部