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ó 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
Contents
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
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/