Cấu hình GRE Tunnel giữa 2 máy chủ Linux

Cấu hình GRE Tunnel giữa 2 máy chủ Linux | Hôm nay mình sẽ hướng dẫn các bạn cấu hình GRE Tunnel trên Linux giúp đóng gói thông tin các giao thức khác nhau hoặc các lưu lượng unicast/multicast đi một kênh đóng gói riêng biệt. Các tính năng của giao thức GRE các bạn có thể đọc thêm tài liệu Cisco hoặc bài viết khác sau này mình sẽ viết.

cấu hình gre tunnel

Có thể bạn quan tâm chủ đề khác
Hướng dẫn xác định tên OS Linux và phiên bản OS bằng bash shell
Cài đặt Guacamole Apache làm Remote Desktop Gateway
Remote Desktop là gì ? 
Cài đặt Ubuntu Server 16.04 LTS
Hướng dẫn chặn ping trên Linux

GRE Tunnel là gì ?

Generic Routing Encapsulation (GRE) là một giao thức được phát triển bởi Cisco, cho phép đóng gói nhiều giao thức ở tầng Network layer trong kết nối point-to-point. Một tunnel GRE được sử dụng khi cần gửi gói tin từ mạng này qua mạng khác hoặc qua mạng không an toàn. Với GRE, một virtual tunnel được tạo ra giữa hai router (linux) đầu cuối và gói tin được đóng gói (encapsulate)/mở gói (decapsulate) gửi qua virtual tunnel.

Một số đặc điểm chung của GRE tunnel

+ GRE tunnel giống IPsec Tunnel vì gói tin gốc được bọc bên ngoài 1 lớp “vỏ”
+ GRE là stateless, và không cung cấp điều khiển luồng (flow control)
+ GRE thêm ít nhất và header 24 byte, trong đó IP header mới 20 byte.
+ GRE hỗ trợ đa giáo thức nên hỗ trợ bất kỳ giao thức lớp 3 nào chạy qua đường hầm(IP, IPX, Apple Talk…)
+ GRE cần thiết cho IP Multicast/ broadcast

Nhược điểm:
+ Không có cơ chế mã hóa
+ Không có cơ chế hash
+ Không có cơ chế xác thực nguồn gốc peer.

Các bạn nếu muốn tìm hiểu sâu hơn về GRE Tunnel thì hãy Google thêm nhé.

Mô hình Lab – GRE Tunnel Linux

  • Host A: 10.12.166.81
  • Host B: 10.12.166.82
  • Network GRE Tunnel: 10.10.10.0/24

lab linux gre

Lưu ý:
– Đây là IP khi làm lab nên dùng IP Private. Trên thực tế bạn có thể áp dụng được IP Public và Private như thường, chỉ cần lưu ý giao thức GRE có được phía DC hỗ trợ hay không nhé.

1. Load module GRE kernel

– Bạn cần load module GRE kernel trên cả 2 máy chủ Host A và B khi cấu hình.

# modprobe gre
# modprobe ip_gre
# lsmod | grep gre
ip_gre 22707 0
ip_tunnel 25163 1 ip_gre
gre 13144 1 ip_gre

– Kích hoạt module GRE kernel khi khởi động máy chủ Linux.

# cd /etc/sysconfig/modules/
# touch gre.modules
# chmod 755 gre.modules
# cat <<EOF > gre.modules
#!/bin/bash
/sbin/modprobe gre ip_gre"
EOF

2. Cấu hình GRE Tunnel

Giả sử ta cần tạo một GRE Tunnel giữa 2 máy chủ Linux có 2 thông tin IP Interface như trên:

Host A: 10.12.166.81
Host B: 10.12.166.82

Lưu ý:
GRE Tunnel cơ bản là hình thức tunnel point-to-point, tức là một tunnel riêng giữa 2 thiết bị router hoặc máy chủ .

2.1 Cú pháp lệnh

Bạn có thể khởi tạo GRE Tunnel bằng cấu hình trực tiếp trên command line. Tuy nhiên cách này chỉ có tác dụng tạm thời, khi reboot sẽ mất cấu hình. Bạn muốn cấu hình mang tĩnh ‘vĩnh viễn‘ thì coi ở phần 3.

Cú pháp:

ip tunnel add <virtual_interface_name> mode gre remote <ip_remote> local <ip_local_connect_remote> ttl 255

+ Host A
Trên máy chủ Host A ta chạy lệnh như trên với các tham số thông tin IP phù hợp. Câu lệnh 3 sẽ khai báo thông tin IP của virtual_interface dùng trong lớp mạng point-to-point GRE Network.

# ip tunnel add gre1 mode gre remote 10.12.166.82 local 10.12.166.81 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.1/24 dev gre1

Kiểm tra route mạng virtual GRE có đi qua virtual interface GRE chưa.

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.12.166.1 0.0.0.0 UG 0 0 0 eth0
10.10.10.2 0.0.0.0 255.255.255.255 UH 0 0 0 gre1
10.12.166.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0

+ Host B
Trên máy chủ Host B ta chạy các lệnh sau.

# ip tunnel add gre1 mode gre remote 10.12.166.81 local 10.12.166.82 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.2/24 dev gre1

Kiểm tra route mạng virtual GRE có đi qua virtual interface GRE chưa.

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.12.166.1 0.0.0.0 UG 0 0 0 eth0
10.10.10.1 0.0.0.0 255.255.255.255 UH 0 0 0 gre1
10.12.166.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0

Lúc này một tunnel GRE sẽ được thiết lập giữa hai máy chủ Host A và Host B.

2.2 Huỷ GRE Tunnel

Nếu bạn muốn huỷ interface ảo ‘gre1’ và huỷ GRE Tunnel đi không xài nữa thì sử dụng lệnh như sau trên cả 2 máy chủ Linux.

# ip link set gre0 down
# ip tunnel del gre0

2.3 Thiết lập firewall

– Bạn cần mở firewall rule cho giao thức GRE ở 2 máy chủ Host A và B, cho phép 2 bên tạo lập GRE Tunnel.
– Sau đó mở thêm rule cho phép giữa 2 cổng virtual interface giao tiếp.

+ Host A

# iptables -A INPUT -i eth0 -p gre -s 10.12.166.82 -j ACCEPT
# iptables -A INPUT -i gre1 -j ACCEPT

+ Host B

# iptables -A INPUT -i eth0 -p gre -s 10.12.166.81 -j ACCEPT
# iptables -A INPUT -i gre1 -j ACCEPT

2.4 Kiểm tra hoạt động GRE Tunnel

– Đứng từ máy chủ Host A (10.10.10.1) ta ping IP trong lớp mạng tunnel private của máy chủ B (10.10.10.2) và ngược lại.

+ Host A

# ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.201 ms
64 bytes from 10.10.10.2: icmp_seq=2 ttl=64 time=0.180 ms
64 bytes from 10.10.10.2: icmp_seq=3 ttl=64 time=0.171 ms
64 bytes from 10.10.10.2: icmp_seq=4 ttl=64 time=0.187 ms

+ Host B

# ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.195 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.176 ms
64 bytes from 10.10.10.1: icmp_seq=3 ttl=64 time=0.194 ms
64 bytes from 10.10.10.1: icmp_seq=4 ttl=64 time=0.193 ms

– Chúng ta sẽ bắt gói tin để kiểm tra hoạt động của GRE Tunnel nhé.

+ Host A
– Đứng trên máy chủ Host A , bật tcpdump để bắt các gói tin GRE. Sau đó qua máy chủ Host B ping đến địa chỉ IP private tunnel (10.10.10.1)

# tcpdump -n -i eth0 proto gre
# tcpdump -n -i eth0 proto 47
15:57:42.562390 IP 10.12.166.81 > 10.12.166.82: GREv0, length 88: IP 10.10.10.1 > 10.10.10.2: ICMP echo request, id 2403, seq 161, length 64
15:57:42.562419 IP 10.12.166.82 > 10.12.166.81: GREv0, length 88: IP 10.10.10.2 > 10.10.10.1: ICMP echo reply, id 2403, seq 161, length 64
15:57:43.562426 IP 10.12.166.81 > 10.12.166.82: GREv0, length 88: IP 10.10.10.1 > 10.10.10.2: ICMP echo request, id 2403, seq 162, length 64
15:57:43.562470 IP 10.12.166.82 > 10.12.166.81: GREv0, length 88: IP 10.10.10.2 > 10.10.10.1: ICMP echo reply, id 2403, seq 162, length 64

3. Cấu hình file config GRE tunnel

– Chúng ta có thể cấu hình file tĩnh cho interface gre1 để khởi tạo tunnel GRE khi máy chủ CentOS vừa khởi động lên.

+ Host A (10.12.166.81)

# vi /etc/sysconfig/network-scripts/ifcfg-gre1
DEVICE=gre1
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=10.12.166.82
PEER_INNER_IPADDR=10.10.10.2
MY_INNER_IPADDR=10.10.10.1

+ Host B (10.12.166.82)

# vi /etc/sysconfig/network-scripts/ifcfg-gre1
DEVICE=gre1
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=10.12.166.81
PEER_INNER_IPADDR=10.10.10.1
MY_INNER_IPADDR=10.10.10.2

Chú thích:
– Giờ bạn chỉ cần khởi động lại dịch vụ mạng là được, hoặc reboot lại OS là kiểm tra được liền là cấu hình GRE có được khởi chạy khi khởi động hệ thống Linux hay không.

# systemctl restart network

Vậy là các bạn đã biết cách để cấu hình GRE Tunnel giữa 2 máy chủ Linux rồi phải không nào !? Chúc các bạn thành công.

Nguồn: https://cuongquach.com/

Previous articleHướng dẫn xác định tên OS Linux và phiên bản OS bằng Bash Shell
Next article[AWS] Hướng dẫn đăng ký thi chứng chỉ AWS tại Việt Nam
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !