Bạn sẽ cần địa chỉ IP bên ngoài nếu muốn kết nối từ xa với máy tính của mình. Tìm nó theo cách thủ công thì dễ, nhưng đây là cách tìm nó từ bên trong tập lệnh Linux.
Địa chỉ IP bên trong và bên ngoài
Địa chỉ Giao thức Internet được sử dụng để xác định các thiết bị trên mạng. Chúng là một nhãn duy nhất trên mạng, được gán cho một thiết bị. Nếu một thiết bị khác muốn gửi dữ liệu đến thiết bị đó, nó có thể thực hiện việc đó bằng cách sử dụng địa chỉ IP của nó.
Modem băng thông rộng của bạn có một bộ định tuyến mạng được tích hợp bên trong để điều hướng lưu lượng mạng quanh mạng từ thiết bị này sang thiết bị khác. Chính quyền địa phương cũng phân bổ địa chỉ IP cho các thiết bị khi chúng tham gia mạng. Nó cũng duy trì một bảng tên mạng và địa chỉ IP. Điều này cho phép bạn đặt tên có ý nghĩa cho các máy tính trong mạng của mình, bởi vì—đối với con người—tên dễ làm việc hơn so với danh sách số.
Các thiết bị trên Internet cũng có một địa chỉ IP. Một số trong số họ cũng có tên, chẳng hạn như các trang web. Các nhà cung cấp dịch vụ tên miền tra cứu tên miền của trang web và trao đổi chúng để lấy địa chỉ IP một cách tự động.
Modem băng thông rộng của bạn được cung cấp kết nối internet hoặc bên ngoài địa chỉ IP của Nhà cung cấp dịch vụ Internet (ISP) của bạn. Bất kể số lượng thiết bị bạn có thể có trong nhà được kết nối với internet, tất cả lưu lượng truy cập kết hợp của chúng đều đi qua địa chỉ IP duy nhất đó.
Nếu bạn ở ngoài thành phố và muốn kết nối với một dịch vụ mà bạn đã chạy trên một trong các máy tính ở nhà, bạn sẽ cần sử dụng địa chỉ IP bên ngoài của mình để làm như vậy. Tất nhiên, bộ định tuyến của bạn sẽ cần được thiết lập để định tuyến yêu cầu kết nối của bạn đến thiết bị thích hợp trong nhà của bạn.
Trừ khi bạn trả thêm một chút cho ISP của mình mỗi tháng cho một tĩnh Địa chỉ IP Địa chỉ IP bên ngoài của bạn có thể thay đổi theo thời gian. Khởi động lại modem băng thông rộng của bạn có thể dẫn đến việc bạn nhận được một địa chỉ IP bên ngoài khác. Vì vậy, nếu bạn cần biết địa chỉ IP bên ngoài của mình, bạn không thể chỉ kiểm tra nó một lần và lưu trữ nó. Bạn sẽ cần xác định định kỳ nó là gì.
Tìm địa chỉ IP bên ngoài của bạn
Để khám phá địa chỉ IP bên ngoài của bạn có nghĩa là nói chuyện với thứ gì đó bên ngoài mạng của bạn. Nói cách khác, truy cập vào thứ gì đó trên internet có thể cung cấp cho chúng tôi thông tin mà chúng tôi muốn. Chúng ta cần nhìn vào khoảng không và xem cái gì đang nhìn lại chúng ta. Và sau đó yêu cầu nó cho địa chỉ bên ngoài của chúng tôi.
Có hai cách chúng ta có thể làm điều này. Một cách liên quan đến các trang web. Có rất nhiều trang web sẽ cho bạn biết địa chỉ IP bên ngoài của bạn và một loạt thông tin khác nữa. Bạn có thể truy cập chúng trong trình duyệt của mình hoặc sử dụng công cụ dòng lệnh như curl
có thể thực hiện các yêu cầu HTTPS.
Một cách khác là sử dụng một lệnh chuyên dụng như dig
. Các dig
lệnh thẩm vấn máy chủ DNS để lấy thông tin.
Sử dụng trình duyệt
Tất nhiên, sử dụng trình duyệt không phải là cách thân thiện với tập lệnh để lấy địa chỉ IP bên ngoài của bạn. Nhưng nhìn vào một trang web cung cấp dịch vụ đó có thể cung cấp cho chúng tôi thông tin hữu ích. Chúng tôi đã từng đề xuất ip4.me nhưng trang này chưa được cập nhật lên HTTPS. Nó vẫn sử dụng HTTP cũ hơn, không an toàn. Trang web vẫn hoạt động, nhưng hiện có những lựa chọn thay thế tốt hơn.
Trang web ifconfig.me cung cấp một bộ thông tin tốt.
Điều này đang báo cáo IP bên ngoài của chúng tôi là 178.238.11.140. Cuộn xuống trang web, bạn sẽ tìm thấy danh sách các lệnh mà bạn có thể sử dụng để truy xuất thông tin từ trang web.
Các ví dụ họ đưa ra tất cả sử dụng curl
để thẩm vấn trang web. Vì vậy, hãy xem xét việc sử dụng curl
.
sử dụng cuộn tròn
Trên các máy thử nghiệm của chúng tôi, Fedora 37 đã có curl
Cài đặt. Chúng tôi cần cài đặt nó trên máy tính Ubuntu và Manjaro của mình.
Để cài đặt nó trên Ubuntu gõ:
sudo apt install curl
Lệnh trên Manjaro là:
sudo pacman -S curl
Chúng ta có thể thử điều này với lệnh đầu tiên được liệt kê trên ifconfig.me
trang web.
curl ifconfig.me
Địa chỉ IP bên ngoài của chúng tôi được truy xuất và hiển thị trong cửa sổ đầu cuối. Đầu ra là xương trần. Thậm chí không có ký tự xuống dòng nào được in sau chuỗi. Dấu nhắc lệnh được đặt ngay trên địa chỉ IP.
Lệnh này hoạt động vì trả lại địa chỉ IP là hành động mặc định của trang web. Nếu hành động mặc định thay đổi, chúng tôi có thể nhận được một kết quả khác được trả về cho chúng tôi. Để đáp ứng điều này, chúng tôi có thể chỉ định rằng chúng tôi đang yêu cầu địa chỉ IP của mình bằng cách thêm mã định danh “ip” vào URL.
curl ifconfig.me/ip
Điều này trả về địa chỉ IP như trước đây.
Điều này minh họa vấn đề với việc sử dụng một trang web làm nguồn địa chỉ IP của bạn. Các trang web có thể đóng cửa hoặc họ có thể thay đổi cách thức hoạt động hoặc định dạng của thông tin được trả về. Những thay đổi này sẽ làm cho các tập lệnh phụ thuộc vào các trang web này bị lỗi hoặc hoạt động không thể đoán trước.
Sử dụng tài nguyên có uy tín và đáng tin cậy như máy chủ DNS là cách hiệu quả hơn để lấy IP bên ngoài của bạn. Để truy vấn máy chủ DNS, chúng ta cần sử dụng lệnh dig.
Sử dụng lệnh đào
Thời gian này, dig
đã được cài đặt trên Fedora và Ubuntu và chúng tôi chỉ phải cài đặt nó trên Manjaro.
Lệnh là bình thường pacman
lệnh, vì vậy không có gì ngạc nhiên ở đó, nhưng tên gói không phải là thứ bạn có thể mong đợi.
sudo pacman -S bind-tools
để sử dụng dig
để khám phá địa chỉ IP bên ngoài của chúng tôi, chúng tôi cần trỏ nó đến máy chủ DNS. Chúng tôi đang sử dụng máy chủ OpenDNS do Cisco cung cấp.
Chúng tôi cần chỉ định tên của máy chủ DNS mà chúng tôi muốn sử dụng, trước dấu “@”. Chúng tôi cũng cần đặt tên cho loại bản ghi mà chúng tôi muốn truy xuất. Trong trường hợp này là “myip”. Các +short
tùy chọn đảm bảo chúng tôi nhận được phản hồi ngắn gọn chứ không phải dài dòng.
dig @resolver1.opendns.com myip.opendns.com +short
Lần này, địa chỉ IP của chúng tôi có một ký tự dòng mới được in sau nó. Như chúng ta sẽ thấy, cái này được in sau chuỗi địa chỉ IP, nó không phải là một phần không thể thiếu của chính chuỗi đó.
Sử dụng chúng trong một tập lệnh
Có nhiều lý do tại sao bạn có thể muốn biết địa chỉ IP bên ngoài của mình từ bên trong tập lệnh. Có lẽ bạn có một tập lệnh giám sát xem địa chỉ IP bên ngoài của bạn có thay đổi hay không và nó sẽ thông báo cho bạn khi điều đó xảy ra. Hoặc có lẽ một máy chủ sẽ thông báo cho các máy khách của nó khi địa chỉ của nó thay đổi. Dù lý do của bạn là gì, chúng tôi có thể thực hiện các lệnh mà chúng tôi đã sử dụng trên dòng lệnh bên trong một tập lệnh khá dễ dàng.
Để truy xuất địa chỉ IP bên ngoài của chúng tôi và gán nó cho một biến, chúng tôi chỉ cần bọc lệnh bên trong thay thế lệnh, $(...)
và gán nó cho một biến, như thế này:
variable=$(...)
Lệnh bên trong dấu ngoặc đơn được thực thi và giá trị trả về được thay thế cho biểu thức. Trong ví dụ này, lệnh được đơn giản hóa thành “biến=giá trị trả về”.
Đây là một kịch bản. Chúng tôi đã thêm -s
tùy chọn (im lặng) cho curl
để ngăn nó báo cáo tiến trình truy xuất dữ liệu.
#!/bin/bash extaddr=$(curl -s ifconfig.me) echo "The external IP address is $extaddr (from cURL)"
Sao chép tập lệnh này vào một trình chỉnh sửa và lưu nó với tên “getex1.sh” và làm cho nó có thể thực thi được với chmod
yêu cầu.
chmod +x getex1.sh
Hãy thực thi tập lệnh và xem những gì chúng ta nhận được.
./getex1.sh
Để làm điều tương tự với tùy chọn mạnh mẽ hơn là sử dụng máy chủ DNS thay vì trang web, tất cả những gì chúng ta cần làm là thay thế curl
lệnh với dig
một.
#!/bin/bash extaddr=$(dig @resolver1.opendns.com myip.opendns.com +short) echo "The external IP address is $extaddr (from dig)"
Lưu tập lệnh này dưới dạng tập lệnh “getex2.sh” và làm cho nó có thể thực thi được với chmod
.
chmod +x getex2.sh
Hãy thực thi kịch bản này.
./getex2.sh
Chúng ta có thể thấy từ đầu ra của hai tập lệnh mặc dù lệnh dig
in một ký tự dòng mới trên dòng lệnh, trong tập lệnh không có dòng mới nào được thêm vào extaddr
Biến đổi.
Đi cho đáng tin cậy
Việc sử dụng một dịch vụ được công nhận có uy tín và có định dạng đầu ra có thể đoán trước luôn an toàn hơn là sử dụng một trang web “không chính thức”. Giống như mọi thứ khác trên internet, hãy xem kỹ xem bạn đang lấy thông tin của mình từ ai.’