Linux를 게이트웨이로 사용하려면 어떻게해야합니까?


16

참고 : 클라이언트 장치 ( computer B이 예에서)가 게이트웨이 컴퓨터를 통해 인터넷을 얻으려면 여전히 네임 서버 확인을 구성해야합니다. 여기서는 설명하지 않습니다 (게이트웨이가 반드시 인터넷을 제공하지는 않습니다).

네트워크 라우팅의 기본 사항을 이해하려고합니다.
그래서 나는 LAN을 실험하고 있습니다 (지금은 인터넷이 필요없고 LAN 통신 만 가능합니다).

네트워크 구성 문제는 다소 복잡하다는 것을 알고 있지만 다른 컴퓨터 (예 : Ubuntu Linux 실행) 의 게이트웨이 역할 컴퓨터 (A)를 만들려고합니다 .
라우터에 연결할 수 있으려면 B 만 필요합니다. 즉 A에만 연결할 수 있습니다.

이것이 그 경우 다:

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

컴퓨터 A라우터에 제대로 연결됩니다 .
컴퓨터 A와 B 연결 미세 (핑, SSH 등 ...) 그들 사이 .
컴퓨터 B가 컴퓨터 A 의 라우터도달 할 수 없습니다 .

B 컴퓨터 A를 기본 게이트웨이로 추가하고 A에서 IP 전달을 활성화 하면 B가 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

컴퓨터 A (중간 게이트웨이)에서 :

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

컴퓨터 B는 여전히 컴퓨터 A를 핑 (Ping) 할 수 있지만 A 용 라우터는 응답하지 않습니다.

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

(핑 응답 없음)

이것은가 올바른 절차 리눅스는 간단한 방식으로 다른 컴퓨터에 대한 게이트웨이 역할을 실행하는 컴퓨터를 만들기 위해?

답변:


21

거의 모든 트래픽이 B로 되돌아 가도록해야합니다. 현재 B에서 외부로 트래픽을 전달했지만 A는 트래픽을 B로 되 돌리는 방법을 모릅니다. 그것을 통해 연결. 이렇게하려면 NAT 를 활성화해야합니다 . 전달이 허용되는 1 단계가 이미 있습니다. 그런 다음 다음을 사용하여 몇 가지 방화벽 규칙을 추가해야합니다 iptables.

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

네트워크 주소 변환 테이블에서 출력 eth0 (외부)의 패킷 라우팅을 알아 낸 후 반환 주소 정보를 자체 주소로 바꾸어 반환 패킷이 우리에게 오도록합니다. 또한이 연결을 기억하는 조회 테이블과 같이이 작업을 수행했음을 기억하십시오.

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

eth1 (내부 인터페이스)에서 오는 패킷이 eth0 (외부 인터페이스)으로 나가도록합니다.

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

이전에 있던 조회 테이블을 사용하여 외부 인터페이스에 도착한 패킷이 실제로 내부에서 시작된 연결에 속하는지 확인하십시오.


간결한 설명. 모든 코드 블록을 컴퓨터 A에서 실행해야합니까?
Sopalajo de Arrierez

@SopalajodeArrierez 네, 이것들은 모두 "게이트웨이"컴퓨터에서 실행됩니다. 시스템 B는 다른 시스템에 도달하려는 경우를 제외하고 라우팅에 대해 아무것도 알 필요가 없으며 패킷을 B로 보냅니다 (기본 GW).
user1794469

데스크탑의 Ubuntu v14 및 Utilite Pro (CompuLabs의 내장 된 장치)의 Ubuntu v12에서 작동하는지 테스트했습니다. 각 줄의 정확한 기능을 확장 해 주셔서 감사합니다. 나는 작동하지 않는 많은 길고 긴 설명을 연구하고 발견했습니다. 이 Question-Answer 스레드가 나중에 다른 사람들에게 유용 할 수 있기를 바랍니다.
Sopalajo de Arrierez 5

@ user1794469 게이트웨이 인터페이스가 가상 (예 : 탭 인터페이스) 일 때 동일합니까? 여기 좀 봐 줄래?
ram

1

게이트웨이 역할을하는 두 Linux 컴퓨터간에 라우팅이 올바르게 작동하려면 몇 가지 사항이 필요합니다.

  • 두 게이트웨이 모두 서로에 대한 물리적 링크가 있어야합니다 (또는 가상 머신을 연결하는 경우 가상).
  • 라우터의 두 인터페이스에 경로를 추가해야합니다.

    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
    
  • 두 게이트웨이 모두에서 원격 네트워크에 대해 로컬 게이트웨이를 지정해야합니다. 이를 통해 로컬 네트워크의 컴퓨터는 원격 네트워크에 패킷을 보낼 위치를 알 수 있습니다. 게이트웨이는 원격 네트워크로 패킷을 보낼 컴퓨터의 IP 주소 여야합니다.

  • 네트워크간에 트래픽을 보내려는 컴퓨터는 원격 게이트웨이와의 트래픽을 처리하는 로컬 게이트웨이를 알고 있어야합니다. 이는 일반적으로 DHCP (Dynamic Host Control Protocol)를 통해 수행되지만 인터넷에 별도의 게이트웨이를 사용하려는 경우 인터넷과 다른 네트워크 모두에 액세스해야하는 컴퓨터 (예 : 인터넷 게이트웨이를 통한 인터넷 게이트웨이)를 모두 지정해야합니다. 라우트를 통한 DHCP 및 다른 네트워크의 게이트웨이).
  • 두 게이트웨이 모두에 대해 IP 전달이 활성화되어 있어야합니다.
  • 게이트웨이간에 NAT가 작동하려면 IP Masquerading을 활성화해야합니다.

    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
    

    가장 무도회에 동일한 인터페이스를 사용하므로 소스와 대상을 지정해야 할 수도 있습니다.

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

    그리고 다른 게이트웨이 :

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

    각 게이트웨이에 대해 다음과 같은 적절한 인터페이스에서 로컬 네트워크 트래픽을 수락해야합니다.

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

    또는

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

발생한 문제를 해결하기 위해 참조 할 수 있는 수많은 링크유사한 질문 이 있습니다.

이 특정 경우에 잘못된 것으로 보이는 것은 컴퓨터에서 경로 및 게이트웨이 설정이 완료되지 않았으며 iptables를 사용하여 NAT (Network Address Translation)를 활성화하지 않아 게이트웨이가 다른 서브넷의 컴퓨터에서 요청을 전달할 수 있다는 것입니다. 그들을 위해.

연결의 한쪽 끝을 담당하기 때문에 인터넷 연결을 설정하는 경우에도 중요합니다 (예 : PPPoE 연결의 게이트웨이로 Linux 컴퓨터 사용).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.