참고 : 클라이언트 장치 (
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
(핑 응답 없음)
이것은가 올바른 절차 리눅스는 간단한 방식으로 다른 컴퓨터에 대한 게이트웨이 역할을 실행하는 컴퓨터를 만들기 위해?
답변
거의 모든 트래픽이 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
이전에 있던 조회 테이블을 사용하여 외부 인터페이스에 도착한 패킷이 실제로 내부에서 시작된 연결에 속하는지 확인하십시오.
답변
게이트웨이 역할을하는 두 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 컴퓨터 사용).