AWS Site-to-Site VPN: bên ngoài, bên trong và tiền tố LAN
Ba vai trò địa chỉ bị nhầm lẫn trên một AWS VPN: các peer bên ngoài, liên kết /30 bên trong và các tiền tố LAN được bảo vệ. Hãy đọc chúng trong cấu hình đã tải xuống.
Phần lớn lỗi trong AWS Site-to-Site VPN là lỗi địa chỉ, và chúng xảy ra trước khi một gói tin kịp di chuyển. Địa chỉ bên ngoài của tunnel đến được các peer IPsec, địa chỉ bên trong tạo nên liên kết định tuyến giữa chúng, và các tiền tố được bảo vệ chính là mục đích của liên kết đó. Hãy sao chép vai trò này sang vai trò kia, tunnel sẽ lên nhưng không có gì được định tuyến. Đây là trình tự đọc-kiểm tra-cấu hình mà tôi dùng trên một gateway khách hàng BGP, với các giá trị lấy từ cấu hình thiết bị đã tải xuống chứ không phải từ trí nhớ.
Ba vai trò địa chỉ, một tunnel
Địa chỉ bên ngoài là công khai và thuộc về các peer IPsec: một địa chỉ cho mỗi tunnel ở phía AWS, và danh tính có thể truy cập của gateway khách hàng ở phía bạn, được điều chỉnh theo cách bố trí NAT mà bạn thực sự có. Địa chỉ bên trong là riêng tư và thuộc về liên kết logic, mà AWS ghi nhận là một /30 lấy từ 169.254.0.0/16. Các tiền tố được bảo vệ là các mạng VPC, nội bộ hoặc chuyển tiếp mà bạn định tuyến và quảng bá qua liên kết đó.
Gán một tiền tố LAN làm địa chỉ của giao diện tunnel là dạng kinh điển của lỗi này. Giao diện trông như đã được cấu hình, LAN không được quảng bá, và phía đối diện không có tuyến cho nó. Tunnel thậm chí có thể vượt qua ping bên trong của chính nó trong khi mọi tên ứng dụng đều hết thời gian chờ. Tài liệu tham chiếu tùy chọn tunnel liệt kê các ràng buộc của CIDR bên trong, bao gồm dải địa chỉ mà nó phải đến từ.
Đọc các giá trị từ cấu hình đã tải xuống
Tải xuống cấu hình cho đúng kiểu thiết bị của bạn từ kết nối, rồi coi bảng địa chỉ của nó là nguồn sự thật. Bảng điều khiển hiển thị cùng các giá trị cho mỗi tunnel: IP bên ngoài, CIDR bên trong và địa chỉ peer BGP ở phía AWS. Hai tunnel là hai đối tượng riêng với điểm cuối bên ngoài riêng và /30 bên trong riêng, dù cả hai đều mang cùng các mạng được bảo vệ.
aws ec2 describe-vpn-connections --vpn-connection-ids vpn-0123456789abcdef0 \
--query 'VpnConnections[0].Options.TunnelOptions[].[OutsideIpAddress,TunnelInsideCidr]'
aws ec2 describe-customer-gateways --customer-gateway-ids cgw-0123456789abcdef0 \
--query 'CustomerGateways[0].[IpAddress,BgpAsn]'Nếu tệp đã tải xuống và bảng điều khiển trực tiếp không khớp, tệp đó đã cũ. Hãy tải lại thay vì sửa địa chỉ bằng tay, vì sự không khớp giữa cặp bên trong và láng giềng đã cấu hình của peer là một hỏng hóc BGP âm thầm.
Dựng liên kết với địa chỉ đúng
Trên gateway Linux, tunnel là giao diện VTI hoặc XFRM, và /30 bên trong được đặt lên giao diện đó. Hai tunnel nghĩa là hai giao diện và hai láng giềng BGP, một cho mỗi điểm cuối AWS. Quy ước mà AWS in trong cấu hình thiết bị đã tải xuống đặt virtual private gateway ở địa chỉ đầu tiên của mỗi /30 bên trong và gateway khách hàng của bạn ở địa chỉ thứ hai, nên bạn lấy địa chỉ cao hơn và peer với địa chỉ thấp hơn. Không gì ở đây cần địa chỉ LAN.
ip tunnel add tun0 mode vti local 203.0.113.10 remote 18.230.1.1 key 42
ip addr add 169.254.10.2/30 dev tun0
ip link set tun0 up mtu 1400
ip tunnel add tun1 mode vti local 203.0.113.10 remote 18.230.2.1 key 43
ip addr add 169.254.10.6/30 dev tun1
ip link set tun1 up mtu 1400Nếu tệp cho kiểu thiết bị của bạn in cặp ngược lại, hãy dùng các con số của nó và giữ nguyên quy tắc: địa chỉ trên giao diện là của bạn, địa chỉ peer thuộc về AWS. Làm ngược lại tạo ra một tunnel không bao giờ đạt Established, vì láng giềng bạn đã cấu hình chính là địa chỉ mà giao diện của bạn đã giữ.
Giữ mark và khóa VTI khớp với thứ mà daemon IKE dùng để gắn một SA con vào giao diện, nếu không lưu lượng đến tunnel mà không có giao diện để hạ cánh. Kiểm tra MTU so với đường đi và so với chính các thiết lập của daemon IKE thay vì sao chép một con số từ site khác.
Xác minh BGP trước khi xác minh tuyến
IPsec lên chỉ chứng minh rằng các peer đồng ý về một hiệp hội bảo mật và không gì hơn. Phiên BGP là một cuộc thương lượng riêng trên liên kết bên trong, nên hãy đọc trạng thái láng giềng và bộ đếm tiền tố, rồi so sánh với điều bạn định quảng bá.
ip -s addr show dev tun0
vtysh -c 'show bgp summary'
vtysh -c 'show bgp neighbors 169.254.10.1'
vtysh -c 'show ip bgp neighbors 169.254.10.1 advertised-routes'Trạng thái Established với không tiền tố nào nhận được là vấn đề chính sách hoặc quảng bá, không phải vấn đề tunnel. Lặp lại toàn bộ việc kiểm tra trên tunnel thứ hai; tunnel thứ nhất chạy được cho bạn biết các địa chỉ là hợp lý, chứ không phải tunnel thứ hai đã được cấu hình.
Theo dõi một gói tin đã định tuyến, rồi dừng lại
Khi phiên đã mang các tiền tố, hãy thử tuyến theo cả hai chiều từ gateway: địa chỉ nguồn, bước nhảy tiếp theo và chính sách bảo mật cho phép lưu lượng. Phiên BGP có thể đang lên trong khi tiền tố cụ thể mà ứng dụng của bạn cần bị lọc, bị tổng hợp hoặc trỏ vào sai giao diện.
Reachability Analyzer là công cụ phía AWS nhận nguồn, đích và đường đi, rồi báo cáo thành phần nào trong một cấu hình được hỗ trợ đã chặn nó. Hãy dùng nó để kiểm tra đường đi từ VPC đến địa chỉ gateway khách hàng của bạn, không phải từ một máy chủ ứng dụng. Nó phân tích cấu hình và không gửi gói tin qua tường lửa tại chỗ, nên hãy tách phán quyết của nó khỏi bộ đếm giao diện và bản bắt gói của chính bạn.
Ghi lại cặp bên ngoài, /30 bên trong và các tiền tố được quảng bá cho mỗi tunnel vào một bảng duy nhất. Chính bảng đó làm cho thay đổi tiếp theo có thể xem xét được.