1. Open vSwitch (OVS) là gì?
Open vSwitch (OVS) là một công cụ mã nguồn mở được sử dụng để tạo và quản lý mạng ảo trong các hệ thống ảo hóa và mạng máy chủ. Nó là một switch ảo phần mềm (soft switch) được thiết kế để chạy trên máy chủ vật lý hoặc máy ảo và cung cấp chức năng của một switch mạng truyền thống.
Open vSwitch hỗ trợ nhiều tính năng mạng như VLAN, GRE, VXLAN, MPLS, QoS, Access Control Lists (ACLs), bonding, teaming và nhiều tính năng khác. Nó cung cấp một giao diện quản lý trên dòng lệnh (command-line interface) và giao diện quản lý đồ họa (graphical user interface) để tạo và quản lý các cấu hình mạng ảo.
Với Open vSwitch, bạn có thể tạo ra mạng ảo linh hoạt và mở rộng, tạo các mạng riêng ảo (VLANs), triển khai mạng trên nhiều máy chủ vật lý hoặc máy ảo, và thực hiện các chức năng mạng phức tạp như định tuyến, chuyển mạch, phân phối tải, và bảo mật mạng.
Open vSwitch là một công cụ quan trọng trong các môi trường ảo hóa như OpenStack, Kubernetes và các hệ thống điện toán đám mây khác, nơi nó giúp tạo và quản lý mạng ảo cho các máy ảo và container. Ngoài ra, Open vSwitch cũng có thể được sử dụng trong các mạng vật lý truyền thống để cung cấp các tính năng mạng linh hoạt và tiện ích của một switch ảo.
2. SDN với Open vSwitch (OVS).
Open vSwitch (OVS) có thể được sử dụng để cấu hình mạng bằng mô hình mạng điều khiển bằng phần mềm (Software-Defined Networking – SDN). SDN là một mô hình mạng trong đó phần cứng mạng được tách ra khỏi phần mềm điều khiển, và quyết định điều khiển và quản lý mạng được thực hiện trên một bộ điều khiển trung tâm. Open vSwitch cung cấp một công cụ phần mềm để triển khai mạng SDN.
Open vSwitch hỗ trợ giao thức OpenFlow, giao thức phổ biến được sử dụng trong mạng SDN để tách phần cứng mạng và phần mềm điều khiển. Giao thức OpenFlow cho phép quản lý mạng trực tiếp từ một bộ điều khiển trung tâm bằng cách gửi các thông điệp điều khiển (control messages) tới các switch mạng.
Bằng cách sử dụng Open vSwitch và giao thức OpenFlow, bạn có thể cấu hình và quản lý mạng SDN bằng cách thiết lập luồng dữ liệu (data flows), quy định quy tắc định tuyến và chuyển mạch mạng, áp dụng các chính sách bảo mật, và theo dõi và phân tích lưu lượng mạng. Open vSwitch cũng cung cấp các tính năng mở rộng khác như chuyển mạch đa lớp (multilayer switching) và chuyển mạch MPLS.
Với Open vSwitch và mô hình SDN, bạn có thể tạo ra mạng linh hoạt, có khả năng mở rộng và dễ quản lý, và điều khiển mạng từ một điểm tập trung. Điều này giúp tối ưu hóa hiệu suất mạng, đáp ứng nhanh chóng với yêu cầu mạng thay đổi, và cung cấp tính linh hoạt cho việc triển khai và quản lý ứng dụng mạng.
3. Cài đặt Open vSwitch (OVS).
Cài đặt Open vSwitch (OVS) bằng lệnh yum.
yum install https://repos.fedorapeople.org/repos/openstack/EOL/openstack-juno/epel-7/openvswitch-2.3.1-2.el7.x86_64.rpm -y
Khởi động Open vSwitch (OVS) và cho phép nó tự khởi động theo OS.
systemctl start openvswitch
systemctl enable openvswitch
4. Thực hành cấu hình Open vSwitch (OVS).
Sơ đồ đấu nối
Đây là sơ đồ khi chưa config xong network.
Và dưới đây là sơ đồ đầu nối sau khi hoàn thành các config network.
Phân tích xíu, hiện tại cả 2 server trên có 3 card mạng với thông tin như sau:
- ens33: Card mạng WAN, mình dùng để ssh vào server.
- ens34 và ens35: là card mạng mình sẽ sử dụng để bond và kết nối vào Open vSwitch (OVS).
Thông tin Server
Thông tin card mạng server cen-node1 (192.168.13.229/23).
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d0:da:af brd ff:ff:ff:ff:ff:ff
inet 192.168.13.229/23 brd 192.168.13.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::5315:858b:ff01:788a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d0:da:b9 brd ff:ff:ff:ff:ff:ff
4: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d0:da:c3 brd ff:ff:ff:ff:ff:ff
Thông tin card mạng server cen-node2 (192.168.13.230/23).
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.13.230/23 brd 192.168.13.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::5315:858b:ff01:788a/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::fa6e:36ae:3693:1ab/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:de brd ff:ff:ff:ff:ff:ff
4: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:e8 brd ff:ff:ff:ff:ff:ff
Xác nhận Open vSwitch (OVS)
đã cài thành công bằng lệnh ovs-vsctl show
trên cả 2 server.
$ ovs-vsctl show
6dd407ed-91df-41ad-9c1b-304145b15789
ovs_version: "2.3.1"
Mình sẽ bonding 2 card mạng ens33 và ens34 để loadbalancing và chịu lỗi. Cấu hình này áp dụng cho cả 2 server nhé.
Các dòng cấu hình dưới đề cập đến cấu hình một slave interface (giao diện con) cho bond interface (giao diện bond). Dưới đây là giải thích ý nghĩa của các dòng cấu hình này (ví dụ cho trường hợp ens35):
TYPE=Ethernet
: Xác định loại giao diện là giao diện Ethernet.NAME="bond0 slave 1"
: Tên của slave interface.DEVICE=ens35
: Tên thiết bị giao diện, trong trường hợp này là ens35.ONBOOT=yes
: Thiết lập slave interface tự động khởi động khi hệ thống boot.MASTER=bond0
: Xác định bond interface mà slave interface này thuộc về, trong trường hợp này là bond0.SLAVE=yes
: Đánh dấu giao diện này là một slave interface của bond interface.
Tổng hợp lại, các dòng cấu hình trên định nghĩa một slave interface có tên là ens35, thuộc về bond interface có tên là bond0. Khi bond interface được kích hoạt, slave interface này sẽ được tự động kích hoạt và sử dụng trong bond interface.
cat > /etc/sysconfig/network-scripts/ifcfg-ens34 << 'OEF'
TYPE=Ethernet
NAME="bond0 slave 1"
DEVICE=ens35
ONBOOT=yes
MASTER=bond0
SLAVE=yes
OEF
cat > /etc/sysconfig/network-scripts/ifcfg-ens35 << 'OEF'
TYPE=Ethernet
NAME="bond0 slave 2"
DEVICE=ens35
ONBOOT=yes
MASTER=bond0
SLAVE=yes
OEF
Tạo file config bonding cho với thông tin như sau, cấu hình này áp dụng cho cả 2 server nhé. Chi tiết nội dung ý nghĩa các dòng config như sau:
BONDING_OPTS="downdelay=300 miimon=300 mode=802.3ad updelay=300 xmit_hash_policy=layer3+4"
: Đây là các tùy chọn cho bond interface. Các tùy chọn này bao gồm:
downdelay=300
: Thời gian (tính bằng mili giây) để chờ trước khi xác định một slave interface là không hoạt động sau khi nhận được tín hiệu không hoạt động.miimon=300
: Thời gian (tính bằng mili giây) giữa các lần kiểm tra hoạt động của các slave interface.mode=802.3ad
: Chế độ bonding, trong trường hợp này là 802.3ad (LACP – Link Aggregation Control Protocol).updelay=300
: Thời gian (tính bằng mili giây) để chờ trước khi xác định một slave interface là hoạt động sau khi nhận được tín hiệu hoạt động.xmit_hash_policy=layer3+4
: Chính sách băm bản tin, trong trường hợp này là sử dụng thông tin Layer 3 và Layer 4 để xác định slave interface nào được sử dụng cho mỗi bản tin.
TYPE=Bond
: Xác định loại giao diện là bond interface.BONDING_MASTER=yes
: Đánh dấu giao diện này là master của bond interface.NAME="Bond connection 1"
: Tên của bond interface.DEVICE=bond0
: Tên thiết bị giao diện bond, trong trường hợp này là bond0.ONBOOT=yes
: Thiết lập bond interface tự động khởi động khi hệ thống boot.BOOTPROTO=none
: Không sử dụng giao thức tự động cấu hình địa chỉ IP (như DHCP). Địa chỉ IP và cấu hình mạng sẽ được cấu hình riêng cho các slave interface.
Tổng hợp lại, các dòng cấu hình trên định nghĩa một bond interface có tên là bond0, sử dụng chế độ 802.3ad (LACP) để gom liên kết các slave interface. Các tùy chọn khác định nghĩa các tham số và cấu hình khác cho bond interface.
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 << 'OEF'
BONDING_OPTS="downdelay=300 miimon=300 mode=802.3ad updelay=300 xmit_hash_policy=layer3+4"
TYPE=Bond
BONDING_MASTER=yes
NAME="Bond connection 1"
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
OEF
Khởi động lại dịch vụ network.
systemctl restart network
Sau khi khởi động lai dịch vụ, bạn đã tạo được card bond0 như sơ đồ dưới đây.
Kiếm tra kết quả bond0 đã xuất hiện trên server cen-node1.
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d0:da:af brd ff:ff:ff:ff:ff:ff
inet 192.168.13.229/23 brd 192.168.13.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::5315:858b:ff01:788a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d0:da:b9 brd ff:ff:ff:ff:ff:ff
4: ens35: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:d0:da:c3 brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:d0:da:c3 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fed0:dac3/64 scope link
valid_lft forever preferred_lft forever
Kiếm tra kết quả bond0 đã xuất hiện trên server cen-node2.
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.13.230/23 brd 192.168.13.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::5315:858b:ff01:788a/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::fa6e:36ae:3693:1ab/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:de brd ff:ff:ff:ff:ff:ff
4: ens35: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:e8 brd ff:ff:ff:ff:ff:ff
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:a0:a0:e8 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fea0:a0e8/64 scope link
valid_lft forever preferred_lft forever
Thêm Open vSwitch (OVS) bằng lệnh ovs-vsctl add-br <tên ovs>
(áp dụng trên cả 2 server).
ovs-vsctl add-br ovs-br0
Xác nhận Open vSwitch (OVS) đã tạo thành công bằng lệnh ovs-vsctl show (áp dụng trên cả 2 server). Kết quả của lệnh ovs-vsctl show
hiển thị thông tin về trạng thái và cấu hình của switch Open vSwitch (OVS). Dưới đây là giải thích ý nghĩa của kết quả được hiển thị:
6dd407ed-91df-41ad-9c1b-304145b15789
: Đây là UUID (Universally Unique Identifier) của bridge (cầu nối) có tên “ovs-br0”. UUID là một số duy nhất được tạo để định danh cho bridge.Bridge "ovs-br0"
: Đây là tên của bridge. Trong trường hợp này, bridge có tên là “ovs-br0”.Port "ovs-br0"
: Đây là tên của port (cổng) trên bridge. Trong trường hợp này, bridge có một port duy nhất có tên “ovs-br0”.Interface "ovs-br0"
: Đây là tên của interface (giao diện) trên port. Trong trường hợp này, port có một interface duy nhất có tên “ovs-br0”.type: internal
: Loại giao diện được sử dụng trên interface, trong trường hợp này là internal. Loại giao diện internal là giao diện ảo chỉ hoạt động trong phạm vi switch Open vSwitch và không liên kết với thiết bị vật lý nào.ovs_version: "2.3.1"
: Đây là phiên bản của Open vSwitch được cài đặt trên hệ thống, trong trường hợp này là phiên bản 2.3.1.
Tổng quan, kết quả hiển thị thông tin về bridge “ovs-br0”, bao gồm port và interface liên quan, cùng với phiên bản của Open vSwitch được sử dụng trên hệ thống.
$ ovs-vsctl show
6dd407ed-91df-41ad-9c1b-304145b15789
Bridge "ovs-br0"
Port "ovs-br0"
Interface "ovs-br0"
type: internal
ovs_version: "2.3.1"
Tiếp theo tạo file config network cho card mạng Open vSwitch (OVS) tên ovs-br0. Đối với server 1 mình cài đặt IP là 10.0.0.1/24.
cat > /etc/sysconfig/network-scripts/ifcfg-ovs-br0 << 'OEF'
DEVICE=ovs-br0
DEVICETYPE=ovsser
TYPE=OVSBridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.0.1
PREFIX=24
OEF
Và đối với server 2 mình cài đặt IP là 10.0.0.2/24.
cat > /etc/sysconfig/network-scripts/ifcfg-ovs-br0 << 'OEF'
DEVICE=ovs-br0
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.0.2
PREFIX=24
OEF
Khởi động lại dịch vụ network.
systemctl restart network
Verify kết quả ovs-br0 đã tạo thành công trên server 1.
$ ip addr show ovs-br0
8: ovs-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether a6:72:21:56:85:4d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 brd 10.0.0.255 scope global ovs-br0
valid_lft forever preferred_lft forever
inet6 fe80::a472:21ff:fe56:854d/64 scope link
valid_lft forever preferred_lft forever
Verify kết quả ovs-br0 đã tạo thành công trên server 2.
$ ip addr show ovs-br0
7: ovs-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 8a:5c:4d:05:62:46 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/24 brd 10.0.0.255 scope global ovs-br0
valid_lft forever preferred_lft forever
inet6 fe80::885c:4dff:fe05:6246/64 scope link
valid_lft forever preferred_lft forever
Mặc dù network đã tạo thành công nhưng bạn vẫn chưa kết nối được từ server 1 sang server 2 và ngược lại.
[root@cen-node1 ~]# ping -c 4 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
From 10.0.0.1 icmp_seq=4 Destination Host Unreachable
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3002ms
[root@cen-node2 ~]# ping -c 4 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.2 icmp_seq=1 Destination Host Unreachable
From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
From 10.0.0.2 icmp_seq=4 Destination Host Unreachable
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
Lý do là bạ chưa đấu nối card mạng bond0 vào Open vSwitch (OVS). Bạn có thể xem sơ đồ dưới đây để dễ hình dung hơn.
Bằng chứng là nếu bạn sử dụng lệnh ovs-vsctl list-ports <tên ovs>
thì sẽ không kết quả trả về.
ovs-vsctl list-ports ovs-br0
Hoặc nếu bạn sử dụng lệnh ovs-vsctl list interface <tên card mạng>
bạn cũng nhận được kết quả không có bond0 nào tồn tại trong Open vSwitch (OVS).
$ ovs-vsctl list interface bond0
ovs-vsctl: no row "bond0" in table Interface
Lệnh ovs-vsctl show cũng cho bạn biết hiện tại chỉ có mỗi card mạng được tạo ra bởi Open vSwitch (OVS) ovs-br0 được đấu nối vào nó với type là internal mà thôi.
$ ovs-vsctl show
026f0031-a17e-45a0-b46c-7301c9a446a7
Bridge "ovs-br0"
Port "ovs-br0"
Interface "ovs-br0"
type: internal
ovs_version: "2.3.1"
Để kết nối bond0 vào ovs-br0 bạn sử dụng cú pháp ovs-vsctl add-port <tên ovs> <tên card mạng>
(cấu hình này áp dụng cho cả 2 server nhé).
ovs-vsctl add-port ovs-br0 bond0
Sau khi chạy lệnh trên, bạn đã đấu nối thành công giữa bond0 và ovs-br0.
Kiểm tra lại bằng các lệnh trên.
$ ovs-vsctl list-ports ovs-br0
bond0
$ ovs-vsctl show
026f0031-a17e-45a0-b46c-7301c9a446a7
Bridge "ovs-br0"
Port "ovs-br0"
Interface "ovs-br0"
type: internal
Port "bond0"
Interface "bond0"
ovs_version: "2.3.1"
$ ovs-vsctl list interface bond0
_uuid : eb55764b-6b82-4f10-8766-2002fc81e8b8
admin_state : up
bfd : {}
bfd_status : {}
cfm_fault : []
cfm_fault_status : []
cfm_flap_count : []
cfm_health : []
cfm_mpid : []
cfm_remote_mpids : []
cfm_remote_opstate : []
duplex : full
external_ids : {}
ifindex : 8
ingress_policing_burst: 0
ingress_policing_rate: 0
lacp_current : []
link_resets : 0
link_speed : 1000000000
link_state : up
mac : []
mac_in_use : "00:0c:29:a0:a0:e8"
mtu : 1500
name : "bond0"
ofport : 1
ofport_request : []
options : {}
other_config : {}
statistics : {collisions=0, rx_bytes=5803, rx_crc_err=0, rx_dropped=0, rx_errors=0, rx_frame_err=0, rx_over_err=0, rx_packets=29, tx_bytes=3790, tx_dropped=0, tx_errors=0, tx_packets=33}
status : {driver_name=bonding, driver_version="3.7.1", firmware_version="2"}
type : ""
Kết quả test ICMP giữa 2 server.
[root@cen-node1 ~]# ping -c 4 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.789 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.487 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.459 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.480 ms
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.459/0.553/0.789/0.139 ms
[root@cen-node2 ~]# ping -c 4 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.889 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.592 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.641 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.545 ms
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.545/0.666/0.889/0.136 ms