Làm cách nào để kết nối với máy khách VM từ hệ thống máy chủ?


15

Tôi có một thiết lập máy chủ web VM và tôi đã cài đặt và khởi động Apache. VM có giao diện mạng được bắc cầu và có thể được ping từ máy chủ bằng cách sử dụng 192.168.0.2.

Tuy nhiên, nếu tôi nhập cùng một địa chỉ IP đó vào trình duyệt trên máy chủ, tôi sẽ thấy trang apache mặc định được tạo trên VM, nhưng thay vào đó, tôi can't connect to 192.168.0.2vào trình duyệt của máy chủ.

Tôi rõ ràng đã bỏ lỡ một cái gì đó. Bất cứ ai biết những gì tôi đã bỏ lỡ hoặc làm sai?

Đầu ra từ VM netstat -tnlp

tcp     0     0 0.0.0.0:22        0.0.0.0:*     LISTEN     950/sshd
tcp     0     0 127.0.0.1:25      0.0.0.0:*     LISTEN    1026/master
tcp     0     0 :::22                  :::*     LISTEN     904/sshd
tcp     0     0 ::1:25                 :::*     LISTEN     980/master

Vẽ sơ bộ những gì tôi nghĩ rằng hoạt động / kết nối mạng sẽ như thế nào.

                               nhập mô tả hình ảnh ở đây


Nếu bạn chỉ thấy :::80, thì Apache chỉ lắng nghe các kết nối IPv6. Bạn đã thử kiểm tra Listenchỉ thị của bạn ?
Lekensteyn

Hãy thử thêm -pcờ để netstatxác minh rằng Apache của bạn thực sự đang nghe trên cổng 80 chứ không phải một số dịch vụ khác. Bạn có thể chạy curl localhosttừ khách? Không grep -C3 -rni Listen /etc/httpd/thể hiện điều gì?
Lekensteyn

Hãy giúp tôi, nếu các hướng dẫn này hoạt động, hãy viết nó thành một câu trả lời, vì bạn sẽ có quyền truy cập vào các ảnh chụp màn hình. Câu hỏi này đưa ra một số tiền khá lớn, tôi không tin rằng giải pháp của nó đã được nắm bắt chính xác.
slm

Câu trả lời:


14

Vấn đề # 1 - Các loại mạng VM

Có 3 chế độ kết nối mạng:

  1. NAT
  2. Chỉ lưu trữ
  3. Cầu nối

Chi tiết về việc thiết lập chúng

Khi nào nên sử dụng mỗi?

  • # 1 : Để phát triển ứng dụng Facebook / web trên các máy chủ khác
  • # 2 : Nếu bạn muốn xây dựng ứng dụng của riêng mình và kiểm tra nó từ máy chủ VirtualBox (không chỉ VM khách)
  • # 3 : Nếu bạn muốn xây dựng một ứng dụng và thử nghiệm nó từ các hệ thống khác trên mạng LAN

Vấn đề # 2 - chặn tường lửa?

Tùy thuộc vào phân phối nào bạn đang sử dụng, tường lửa có thể chặn trình duyệt web của bạn truy cập vào phiên bản Apache của bạn. Điều này có nghĩa là bạn có thể ping hệ thống, nhưng không truy cập được qua cổng 80, đây là cổng mà Apache đang nghe.

tạm thời vô hiệu hóa nó

Trên CentOS, bạn sử dụng lệnh này để vô hiệu hóa nó.

$ /etc/init.d/iptables stop

kiểm tra xem Apache có nghe không

Bạn cũng có thể xác nhận rằng nó đang nghe trên cổng này.

$ netstat -antp | grep :80 | head -1 | column -t
tcp  0  0  :::80  :::*  LISTEN  3790/httpd

xác nhận tắt tường lửa

Tường lửa có thể được xác nhận rằng nó rộng mở.

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

Nếu điều này giải quyết vấn đề của bạn thì bạn có thể thêm vĩnh viễn một quy tắc cho phép lưu lượng truy cập thông qua cổng TCP 80.

thêm quy tắc cho cổng TCP 80

$ /etc/init.d/iptables restart
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ /etc/init.d/iptables save

GHI CHÚ: Điều này sẽ làm cho quy tắc tồn tại giữa các lần khởi động lại.

tường lửa chấp nhận cổng TCP 80

Một hệ thống có cổng 80 mở sẽ trông giống như thế này:

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:8834 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Vấn đề # 3 - Nghe Apache?

Trong vấn đề trên, chúng tôi đã thấy rằng Apache đang lắng nghe, nhưng đôi khi nó được cấu hình sai để nó chỉ nghe trên 1 địa chỉ IP hoặc nó đang nghe trên một giao diện mạng khác. Lệnh netstatcó thể được sử dụng để kiểm tra lại điều này cũng như xem xét các tệp cấu hình Apache.

$ netstat -anpt | grep :80 | column -t
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  1750/httpd

Điều này cho thấy Apache đang lắng nghe trên tất cả các giao diện (IP 0.0.0.0).

Tôi sẽ không nhắc lại những gì @ Lekensteyn câu trả lời của bao gồm vấn đề cụ thể này chi tiết hơn ở đây.

Người giới thiệu


Bây giờ tôi hoàn toàn bối rối. Tôi đã có VM ở chế độ bắc cầu, tôi có thể ping VM từ máy chủ nhưng tôi không thể truy cập cùng một địa chỉ IP từ trình duyệt web trên máy chủ mặc dù VM đã cài đặt và khởi động, tôi sẽ thấy các it worked!trang apache.
oshirowanen

@oshirowanen - cảm ơn vì đã không nản lòng khi chúng tôi cố gắng giải quyết vấn đề 8-). Hãy chắc chắn rằng Apache đang chạy trên CentOS /etc/init.d/httpd status, sẽ hiển thị đang chạy.
slm

1
Tôi đã dừng tường lửa trên VM và bây giờ tôi có thể thấy trang IP mặc định khi sử dụng trình duyệt web trên máy chủ để truy cập url của VM !!!
oshirowanen

1
@oshirowanen - WOOHOO! OK, vì vậy toàn bộ vấn đề chỉ là tường lửa, tôi sẽ thêm một lệnh để thêm quy tắc vào tường lửa của bạn, bạn cũng có thể làm cho nó vĩnh viễn với lệnh này , /sbin/service iptables save.
slm

Đúng! Tôi đã cài đặt CentOS tối thiểu và tôi không nên cho rằng tường lửa bị tắt theo mặc định ... Thành thật mà nói, tường lửa thậm chí không xuất hiện trong đầu tôi. Cảm ơn đã dành thời gian của bạn để giúp đỡ.
oshirowanen

2

Cài đặt Apache của bạn có khả năng được cấu hình để chỉ nghe trên localhost. Bạn có thể xác minh rằng bằng cách chạy trong khách của bạn:

$ netstat -tnl | grep :80
Proto Recv-Q Send-Q Local Address      Foreign Address  State
tcp        0      0 0.0.0.0:80         0.0.0.0:*        LISTEN
tcp6       0      0 :::80              :::*             LISTEN

Nếu nó nói 0.0.0.0:80, nó lắng nghe trên tất cả các giao diện. Trong trường hợp của bạn, tôi sẽ mong đợi 127.0.0.1:80thay thế. Để giải quyết vấn đề này, hãy chỉnh sửa cấu hình Apache của bạn (ở đâu đó /etc/httpd/conf/) và thay đổi:

Listen 127.0.0.1:80

đến:

Listen 80

Bạn cũng có thể sử dụng nmapđể xác minh các dịch vụ có sẵn trên máy của mình. Nó sẽ trông giống như:

$ nmap 192.168.0.2

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-11 15:22 CET
Nmap scan report for localhost (192.168.0.2)
Host is up (0.0036s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.