Làm cách nào tôi có thể sử dụng Linux làm Cổng?


16

LƯU Ý: Nếu thiết bị khách (computer B trong ví dụ này) muốn lấy internet thông qua máy tính cổng, có thể chúng vẫn cần định cấu hình độ phân giải máy chủ tên. Điều này không được giải thích ở đây (một cổng không nhất thiết phải phục vụ internet).

Tôi đang cố gắng để hiểu các nguyên tắc cơ bản của định tuyến mạng.
Vì vậy, tôi đang thử nghiệm mạng LAN của mình (hiện tại tôi không cần internet, chỉ cần liên lạc với mạng LAN).

Tôi biết các vấn đề cấu hình mạng là một điều khá phức tạp, nhưng tôi chỉ đang cố gắng tạo ra một máy tính (nói A) để hoạt động như một cổng cho một người khác (nói B) (cả chạy Ubuntu Linux).
Tôi chỉ cần B có khả năng tiếp cận bộ định tuyến, điều đó chỉ có thể tiếp cận với A.

Đây là trường hợp:

Router for computer A  -->  192.168.0.1
Computer A - eth0      -->  192.168.0.2
Computer A - eth1      -->  192.168.1.1

Computer B - eth0      -->  192.168.1.2

Máy tính A kết nối tốt với bộ định tuyến .
Máy tính A và B kết nối tốt (ping, SSH ... vv) giữa chúng .
Máy tính B không thể truy cập bộ định tuyến cho máy tính A.

Tôi đã nghĩ rằng chỉ cần thêm vào B Máy tính A làm cổng mặc định và kích hoạt Chuyển tiếp IP trên A sẽ khiến B có thể truy cập bộ định tuyến cho A:

luis@ComputerB:~$ sudo route add default gw 192.168.1.1
luis@ComputerB:~$ sudo routel

target            gateway      source        proto    scope  dev   tbl
127.0.0.0         broadcast    127.0.0.1     kernel   link   lo    local
127.0.0.0 8       local        127.0.0.1     kernel   host   lo    local
127.0.0.1         local        127.0.0.1     kernel   host   lo    local
127.255.255.255   broadcast    127.0.0.1     kernel   link   lo    local
192.168.1.0       broadcast    192.168.1.2   kernel   link   eth0  local
192.168.1.2       local        192.168.1.2   kernel   host   eth0  local
192.168.1.255     broadcast    192.168.1.2   kernel   link   eth0  local
default           192.168.1.1                                eth0
169.254.0.0 16                                        link   eth0
192.168.1.0 24                 192.168.1.2   kernel   link   eth0

Và trên Máy tính A (cổng trung gian):

root@ComputerA:~$ echo 1 > /proc/sys/net/ipv4/ip_forward

Máy tính B vẫn có thể ping máy tính A, nhưng bộ định tuyến cho A không trả lời:

luis@ComputerB:~$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^C

(Không có phản hồi ping)

Đây có phải là quy trình chính xác để làm cho một máy tính chạy Linux hoạt động như một cổng cho một máy tính khác một cách đơn giản?

Câu trả lời:


21

Bạn gần như ở đó, bạn chỉ cần đảm bảo lưu lượng truy cập trở lại B. Ngay bây giờ bạn đã chuyển lưu lượng truy cập từ B ra thế giới bên ngoài nhưng A không biết làm thế nào để đưa lưu lượng truy cập trở lại B. Bạn cần A để giữ trạng thái các kết nối đi qua nó. Để làm điều này, bạn sẽ muốn kích hoạt NAT . Bạn đã có bước một cho phép chuyển tiếp. Sau đó, bạn cần thêm một vài quy tắc tường lửa bằng cách sử dụng iptables:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Điều này cho biết: trên bảng dịch địa chỉ mạng, sau khi chúng tôi đã tìm ra định tuyến của gói trên đầu ra eth0 (bên ngoài), hãy thay thế thông tin địa chỉ trả về bằng chính chúng tôi để các gói trả về cho chúng tôi. Ngoài ra, hãy nhớ rằng chúng tôi đã làm điều này (giống như một bảng tra cứu ghi nhớ kết nối này).

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Cho phép các gói muốn đến từ eth1 (giao diện bên trong) đi ra eth0 (giao diện bên ngoài).

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Sử dụng bảng tra cứu mà chúng ta đã có từ trước để xem liệu gói đến trên giao diện bên ngoài có thực sự thuộc về một kết nối đã được bắt đầu từ bên trong không.


Một lời giải thích ngắn gọn, thực sự. Tất cả các khối mã phải được thực thi trên Máy tính A?
Sopalajo de Arrierez

@SopalajodeArrierez Có tất cả những thứ này được thực thi trên máy tính "gateway". Hệ thống B không cần biết gì về định tuyến ngoài việc nó muốn đến bất kỳ máy nào khác, nó sẽ gửi các gói đến B (đó là GW mặc định).
dùng1794469

Đã thử nghiệm làm việc trên Ubuntu v14 trên máy tính để bàn và Ubuntu v12 trên Utilite Pro (một tài liệu nhúng từ CompuLabs). Cảm ơn bạn rất nhiều vì đã mở rộng trên chính xác từng dòng. Tôi đã nghiên cứu và tìm thấy nhiều lời giải thích dài dài mà không hiệu quả. Tôi hy vọng chủ đề Câu hỏi-Trả lời này có thể hữu ích cho những người khác trong tương lai.
Sopalajo de Arrierez

@ user1794469 có giống nhau không khi giao diện cổng là ảo, tức là giao diện nhấn? bạn có thể xem ở đây không?
ram

1

Để định tuyến hoạt động chính xác giữa hai máy tính Linux đóng vai trò là cổng, có một số điều cần phải có:

  • Cả hai cổng cần phải có một liên kết vật lý với nhau (hoặc ảo nếu bạn đang liên kết các máy ảo).
  • Các tuyến phải được thêm vào cả hai giao diện trên bộ định tuyến.

    route add -net 192.168.0.0/24 gw 192.168.0.1
    route add -net 192.168.1.0/24 gw 192.168.1.1
    
  • Một cổng cục bộ phải được chỉ định cho mạng từ xa trên cả hai cổng. Điều này cho phép các máy tính trên mạng cục bộ biết nơi gửi các gói cho mạng từ xa. Cổng phải là địa chỉ IP của máy tính sẽ gửi các gói đến mạng từ xa.

  • Các máy tính muốn gửi lưu lượng giữa các mạng cũng phải được biết về cổng cục bộ nào đang xử lý lưu lượng đến và từ mạng từ xa. Điều này thường được thực hiện thông qua Giao thức điều khiển máy chủ động (DHCP), tuy nhiên nếu bạn có ý định sử dụng một cổng riêng cho internet, bạn sẽ cần chỉ định cả trên các máy tính cần truy cập vào cả Internet và mạng khác (ví dụ: cổng Internet thông qua DHCP và cổng của mạng khác thông qua một tuyến đường).
  • Chuyển tiếp IP phải được kích hoạt cho cả hai cổng.
  • IP Masquerading phải được kích hoạt để cho phép NAT hoạt động giữa các cổng.

    modprobe iptable_nat
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A FORWARD -i eth1 -j ACCEPT
    

    Bạn có thể cần chỉ định nguồn và đích vì bạn đang sử dụng cùng một giao diện để giả mạo:

    iptables -t nat -A POSTROUTING -i eth0 -s 192.168.0.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
    

    và các cổng khác:

    iptables -t nat -A POSTROUTING -i eth1 -s 192.168.1.0/24 ! -d 192.168.0.0/24 -j MASQUERADE   
    

    Đối với mỗi cổng, lưu lượng truy cập mạng cục bộ phải được chấp nhận trên giao diện thích hợp như thế này:

    iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -j ACCEPT
    

    hoặc là

    iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPT
    

rất nhiều liên kếttương tự câu hỏi có thể được tham khảo để giải quyết các vấn đề bạn đang gặp phải.

Điều có vẻ sai trong trường hợp cụ thể này là thiết lập tuyến và cổng không hoàn thành trên cả hai máy tính và Dịch địa chỉ mạng (NAT) chưa được bật bằng iptables, cho phép các cổng thực hiện yêu cầu từ máy tính trên mạng con khác thay mặt họ.

Việc này cũng rất quan trọng khi thiết lập kết nối internet vì bạn chịu trách nhiệm cho một đầu của kết nối (ví dụ: sử dụng máy tính Linux làm cổng cho kết nối PPPoE).

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.