Chúng tôi có một loạt máy chủ phụ trợ ở dạng phiên bản EC2 dựa trên mạng con riêng trong AWS VPC cần kết nối với API của bên thứ ba. API này đang giới hạn các yêu cầu mà chúng tôi có thể gửi dựa trên địa chỉ IP ban đầu và trong khi mở rộng quy mô thiết lập của mình, chúng tôi đã bắt đầu đạt đến giới hạn đối với IP của cổng NAT được sử dụng cho tất cả lưu lượng truy cập ra bên ngoài.
Vì vậy, tôi muốn thiết lập proxy cho lưu lượng truy cập bên ngoài với một số EIP được đính kèm. Để thử nghiệm, tôi hiện đang sử dụng phiên bản Amazon Linux 2 có 2 ENI và mỗi ENI được đính kèm 2 EIP.Các máy chủ phụ trợ mở một đường hầm SSH tới proxy gửi đi và ánh xạ API của bên thứ 3 tới một cổng cục bộ, một mục nhập trong tệp lưu trữ của máy chủ sẽ chuyển hướng tất cả lưu lượng truy cập đến tên máy chủ đó sang localhost và thiết lập này nói chung hoạt động tốt nhưng lưu lượng truy cập ra ngoài từ proxy luôn chỉ sử dụng EIP được liên kết đầu tiên.
Vì vậy, thiết lập của tôi trông như thế này:
ENI1: eth0
IP1 riêng tư: 10.0.11.81
IP2 riêng: 10.0.11.82
ENI2: eth1
IP3 riêng: 10.0.11.52
IP4 riêng tư: 10.0.11.53
bảng lộ trình ban đầu:
mặc định qua 10.0.11.1 dev eth0
mặc định qua 10.0.11.1 dev eth1 số liệu 10001
10.0.11.0/24 dev eth0 liên kết phạm vi kernel proto src 10.0.11.81
10.0.11.0/24 dev eth1 liên kết phạm vi kernel proto src 10.0.11.52
169.254.169.254 nhà phát triển eth0
Bây giờ tôi muốn có thể chỉ định máy chủ phụ trợ nào sử dụng EIP nào khi gọi API qua proxy gửi đi. Lần thử đầu tiên của tôi là như sau:
- thiết lập 4 người dùng khác nhau trên máy chủ proxy
- thêm quy tắc iptable cho mỗi người dùng như vậy:
iptables -t nat -m owner --uid-owner user1 -A POSTROUTING -j SNAT --to IP1
vân vân.
- điều này hoạt động đối với 2 IP được gắn với ENI chính (tức là eth0 trong máy) nhưng không hoạt động đối với 2 IP được liên kết với ENI thứ hai (eth1)
- thêm
-o eth1
đến tuyên bố cũng không hoạt động
Lần thử tiếp theo của tôi là tạo các bảng định tuyến tùy chỉnh cho từng địa chỉ IP và khớp chúng với các quy tắc chính sách:
- tạo bảng định tuyến tùy chỉnh, tức là cho IP3:
mặc định qua 10.0.11.1 dev eth1
10.0.11.0/24 dev eth1 liên kết phạm vi tĩnh proto src 10.0.11.52
Liên kết phạm vi 169.254.169.254 dev eth1
- tạo quy tắc iptables để đánh dấu lưu lượng bắt nguồn từ user3:
-A OUTPUT -m chủ sở hữu --uid-chủ sở hữu 1003 -j MARK --set-xmark 0x3/0xffffffff
- tạo quy tắc để sử dụng bảng định tuyến tùy chỉnh cho tất cả các gói được đánh dấu 3:
32763: từ tất cả tra cứu fwmark 0x3 ip3
- điều này một lần nữa không hoạt động. các gói được xử lý khác nhau. tất cả người dùng có thể giao tiếp với thế giới ngoại trừ người dùng 3 trong ví dụ trên.
Tôi đang làm gì sai? Có điều gì đó tầm thường mà tôi đang thiếu hay toàn bộ cách tiếp cận của tôi sẽ thất bại? Tôi rất cởi mở với các đề xuất, cả về cách thiết lập này hoạt động cũng như các phương pháp thay thế...
Cảm ơn rất nhiều trước!