Tôi không nghĩ rằng có một câu trả lời chắc chắn đúng cho câu hỏi của bạn. Thay vào đó, có rất nhiều cách làm thế nào để đạt được những gì bạn muốn. Do đó, tôi sẽ cung cấp một số gợi ý cách thực hiện nó.
Nếu một máy có nhiều hơn 2 giao diện ( lo
được tính là một), bạn sẽ gặp khó khăn để tự động phát hiện giao diện phù hợp một cách dễ dàng. Dưới đây là một số công thức về cách thực hiện.
Ví dụ, vấn đề là nếu các máy chủ nằm trong DMZ phía sau tường lửa NAT thay đổi IP công cộng thành một số IP riêng và chuyển tiếp các yêu cầu. Máy của bạn có thể có 10 giao diện, nhưng chỉ một giao diện tương ứng với giao diện chung.
Ngay cả tính năng tự động phát hiện cũng không hoạt động trong trường hợp bạn đang sử dụng NAT kép, trong đó tường lửa của bạn thậm chí còn dịch IP nguồn thành một thứ hoàn toàn khác. Vì vậy, bạn thậm chí không thể chắc chắn, rằng tuyến đường mặc định dẫn đến giao diện của bạn với giao diện công khai.
Phát hiện nó thông qua tuyến đường mặc định
Đây là cách tôi đề xuất để tự động phát hiện mọi thứ
Một cái gì đó giống như ip r get 1.1.1.1
thường cho bạn biết giao diện có tuyến đường mặc định.
Nếu bạn muốn tạo lại điều này bằng ngôn ngữ lập trình / kịch bản yêu thích của mình, hãy sử dụng strace ip r get 1.1.1.1
và đi theo con đường gạch màu vàng.
Đặt nó với /etc/hosts
Đây là khuyến nghị của tôi nếu bạn muốn kiểm soát
Bạn có thể tạo một mục nhập /etc/hosts
như
80.190.1.3 publicinterfaceip
Sau đó, bạn có thể sử dụng bí danh này publicinterfaceip
để tham chiếu đến giao diện công khai của mình.
Đáng buồn là haproxy
không tìm hiểu thủ thuật này với IPv6
Sử dụng môi trường
Đây là một giải pháp tốt /etc/hosts
trong trường hợp bạn khôngroot
Giống như /etc/hosts
. nhưng sử dụng môi trường cho việc này. Bạn có thể thử /etc/profile
hoặc ~/.profile
cho điều này.
Do đó, nếu chương trình của bạn cần một biến MYPUBLICIP
thì bạn có thể bao gồm mã như (đây là C, hãy tạo C ++ từ nó):
#define MYPUBLICIPENVVAR "MYPUBLICIP"
const char *mypublicip = getenv(MYPUBLICIPENVVAR);
if (!mypublicip) { fprintf(stderr, "please set environment variable %s\n", MYPUBLICIPENVVAR); exit(3); }
Vì vậy, bạn có thể gọi tập lệnh / chương trình của mình /path/to/your/script
như thế này
MYPUBLICIP=80.190.1.3 /path/to/your/script
điều này thậm chí hoạt động trong crontab
.
Liệt kê tất cả các giao diện và loại bỏ những giao diện bạn không muốn
Cách tuyệt vọng nếu bạn không thể sử dụng ip
Nếu bạn biết những gì bạn không muốn, bạn có thể liệt kê tất cả các giao diện và bỏ qua tất cả các giao diện sai.
Đây dường như là một câu trả lời https://stackoverflow.com/a/265978/490291 cho cách tiếp cận này.
Làm điều đó như DLNA
Cách của một người đàn ông say rượu cố gắng nhấn chìm mình trong rượu
Bạn có thể thử liệt kê tất cả các cổng UPnP trên mạng của mình và bằng cách này, bạn có thể tìm ra lộ trình thích hợp cho một số thứ "bên ngoài". Điều này thậm chí có thể nằm trên một tuyến đường mà tuyến đường mặc định của bạn không trỏ đến.
Để biết thêm về điều này, có thể xem https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol
Điều này mang lại cho bạn ấn tượng tốt về cái nào là giao diện công khai thực sự của bạn, ngay cả khi tuyến đường mặc định của bạn chỉ ở nơi khác.
Có nhiều hơn nữa
Nơi ngọn núi gặp nhà tiên tri
Các bộ định tuyến IPv6 tự quảng cáo để cung cấp cho bạn tiền tố IPv6 phù hợp. Nhìn vào tiền tố cho bạn gợi ý về việc nó có một số IP nội bộ hay một IP toàn cầu.
Bạn có thể nghe các khung IGMP hoặc IBGP để tìm ra một số cổng thích hợp.
Có ít hơn 2 ^ 32 địa chỉ IP. Do đó, không mất nhiều thời gian trên mạng LAN để ping tất cả chúng. Điều này cung cấp cho bạn một gợi ý thống kê về vị trí của phần lớn Internet theo quan điểm của bạn. Tuy nhiên, bạn nên hợp lý hơn một chút so với https://de.wikipedia.org/wiki/SQL_Slammer nổi tiếng
ICMP và thậm chí ARP là những nguồn tốt cho thông tin băng tần mạng. Nó cũng có thể giúp bạn.
Bạn có thể sử dụng địa chỉ Ethernet Broadcast để liên hệ với tất cả các thiết bị cơ sở hạ tầng mạng của mình, điều này thường sẽ hữu ích, như DHCP (thậm chí DHCPv6), v.v.
Danh sách bổ sung này có lẽ là vô tận và luôn không đầy đủ, bởi vì mọi nhà sản xuất thiết bị mạng đang bận rộn phát minh ra các lỗ hổng bảo mật mới về cách tự động phát hiện thiết bị của họ. Điều này thường giúp ích rất nhiều cho cách phát hiện một số giao diện công cộng mà không có giao diện nào.
'' Nuff nói. Ngoài.