linux远程连接 ipv6,Ansible 配置 IPv6 连接

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

背景

平时工作中因为通常需要远程操作较多 Linux 环境,引入了 Ansible,但是大都是通过 Ansible 远程命令的方式执行,少数的封装为 Playbook 也是很简单的配置。

最早的时候用过简单的 SaltStack,但是要安装 Agent,觉得不好用,在 16年早期的时候使用 Ansible,简单快捷(当然我对性能没有要求)。

最近需要把之前由 Shell & Python 拼装的一个服务统一用 Ansible 进行重写,又花了些时间看了看相关文档。发现大家操作远程机器无论是通过秘钥还是通过密码,都是基于 IPv4 的地址链接的,而有些机器是没有 IPv4 地址的,于是花费了些时间验证 Ansible IPv6 配置方式。

IPv6

IPv6 维基百科的解释是:网际协议第6版(英文:Internet Protocol version 6,缩写:IPv6)是网际协议(IP)的最新版本,用作互联网的网络层协议,用它来取代IPv4主要是为了解决IPv4地址枯竭问题,不过它也在其他很多方面对IPv4有所改进。我们目前日常中使用的地址都是 IPv4 的地址(比如:192.168.1.1)。

使用 IPv6 有一个好处是,可以通过 NDP(Neighbor Discovery Protocol)扫描二层网络内的所有的 IPv6 地址,方便我们使用,那么我们如何判断 IPv6 是否可以连通呢?

可以通过 ping6 的方式判断,比如:1

2

3

4

5

6

7

8[[email protected] 14:00:44 ~]$ping6 fe80::2487:93ff:fe9a:c546%port-mgt

PING fe80::2487:93ff:fe9a:c546%port-mgt(fe80::2487:93ff:fe9a:c546%port-mgt) 56 data bytes

64 bytes from fe80::2487:93ff:fe9a:c546%port-mgt: icmp_seq=1 ttl=64 time=0.443 ms

64 bytes from fe80::2487:93ff:fe9a:c546%port-mgt: icmp_seq=2 ttl=64 time=0.488 ms

^C

--- fe80::2487:93ff:fe9a:c546%port-mgt ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1000ms

rtt min/avg/max/mdev = 0.443/0.465/0.488/0.031 ms

注意这里的 IPv6 的格式,前面是 IPv6 地址,后面是本地网络接口名称,如果是物理网卡则接物理网卡名称,如果是 OVS Port,则接 Port 名称。

既然地址可以连通,那么我们思考如何进行远程控制。

SSH 远程连接

通常我们通过 IPv4 地址链接远程 Linux,通过如下方式:1

2

3

4[[email protected] 14:01:23 ~]$ssh 192.168.30.112

Last login: Fri Aug 17 12:15:52 2018 from 192.168.16.1

我们尝试将上面的 IPv4 地址替换为 IPv6 地址试试看:1

2

3[[email protected] 14:04:55 ~]$ssh fe80::2487:93ff:fe9a:c546

ssh: connect to host fe80::2487:93ff:fe9a:c546 port 22: Invalid argument

直接指定 IPv6 地址是无法识别的,那么我们按照 ping6 规则,加上网络接口名称试试看:1

2

3

4[[email protected] 14:05:10 ~]$ssh fe80::2487:93ff:fe9a:c546%port-mgt

[email protected]::2487:93ff:fe9a:c546%port-mgt's password:

Last login: Fri Aug 17 14:04:56 2018 from fe80::d4b7:acff:fe2f:604e%ovsbr-mgt

一切顺利,我们成功的登录到了远程的机器上,我们知道 Ansible 是通过 SSH 的方式远程控制的,具体是调用 Python 的 (paramiko)[https://github.com/paramiko/paramiko/] ,我们接下来配置 Ansible。

Ansible 远程连接

Ansible Inventory 标准格式是:IP options ,比如:1

2[cluster]

fe80::58d3:16ff:fe43:ce77%port-mgt ansible_ssh_user=root ansible_ssh_pass=abc123

验证 Ansible 远程控制:1

2

3

4[[email protected] 14:11:14 ~]$ansible cluster -m raw -a 'uptime'

fe80::58d3:16ff:fe43:ce77%port-mgt | SUCCESS | rc=0 >>

14:11:22 up 7 days, 23:15, 2 users, load average: 1.55, 1.39, 1.23

Shared connection to fe80::58d3:16ff:fe43:ce77%port-mgt closed.

总结

只要注意在 IPv6 地址后加上本地网络接口名称就可以正确配置 IPv6 远程控制了。

你可能感兴趣的:(linux远程连接,ipv6)