문제의 결론

문제의 결론

문제의 결론

다음은 Linux 시스템의 라우팅 테이블입니다.

root@computer:~# ip route show
default via 192.168.1.1 dev eth0 
10.0.0.200 dev tun0  proto kernel  scope link  src 10.0.0.100

대상 IP가 1.2.3.5인 이 컴퓨터의 tun0으로 전송된 패킷은 eth0에서 전송되지 않습니다.

내가 만들고자 하는 것에 대한 자세한 설명

이 프로젝트의 목표는 내 컴퓨터 중 하나(및 향후 더 많은 컴퓨터)에 공용 IP 주소를 제공하는 것입니다. 두 가지 요구 사항이 있습니다.

  • 이 컴퓨터는 내가 제어할 수 없는 NAT 뒤에 있습니다.
  • LAN에 있는 다른 컴퓨터가 (상대적으로) 느린 인터넷을 통해 액세스하는 것을 원하지 않습니다.

건축학

이것은 내가 사용하는 아키텍처입니다.여기에 이미지 설명을 입력하세요.

컴퓨터:

  • A: 인터넷상의 임의의 컴퓨터가 컴퓨터 F에 연결하려고 합니다.
  • B: E를 통해 F로 라우팅하려는 추가 IP(1.2.3.5)가 있습니다.
  • C: 내 통제하에 있지 않습니다.
  • D: 내 라우터에는 고정 경로가 있습니다: 1.2.3.5 ---> 192.168.1.3
  • E: B를 사용하여 SSH TUN을 설정하고 1.2.3.5로 향하는 수신 패킷을 기본 게이트웨이 D로 라우팅합니다.
  • F: 다른 모든 컴퓨터(내 LAN에 있든 인터넷에 있든)가 1.2.4.5를 통해 액세스하기를 원하는 서버

설정

B, E, F에서 IP 전달을 설정합니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

/etc/sysctl.conf가 E:로 수정되었습니다.

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

E에서 SSH TUN 설정:

ssh -w 0:0 1.2.3.4

E:에서 tun0 인터페이스를 시작합니다.

ip link set tun0 up
ip addr add 10.0.0.100/32 peer 10.0.0.200 dev tun0

B에서 tun0 인터페이스를 시작합니다.

ip link set tun0 up
ip addr add 10.0.0.200/32 peer 10.0.0.100 dev tun0

이제 다음을 사용하여 B에서 E를 성공적으로 ping할 수 있습니다.

ping 10.0.0.100

다음 명령을 사용하여 B의 인터페이스에서 IP 1.2.3.5를 제거합니다. ifconfig venet0:1 0.0.0.0

B에 경로 추가: ip 경로 10.0.0.100 dev tun0을 통해 1.2.3.5/32 추가

다음 명령을 사용하여 F의 인터페이스에 IP를 추가합니다. ip addr add 1.2.3.5 dev eth0

시험

A에서 다음 명령을 실행하여 패킷 전송을 테스트합니다.

netcat -u 1.2.3.5 4444

E에서 다음 명령을 실행하여 패킷이 수신되었는지 확인합니다.

root@computer:~$ tcpdump -n -i tun0 port 4444
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
13:48:21.034003 IP 4.3.2.1.44312 > 1.2.3.5.4444: UDP, length 5


root@computer:~$ tcpdump -n -i eth0 port 4444
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:48:21.034061 IP 4.3.2.1.44312 > 1.2.3.5.4444: UDP, length 5

E에서 다음 명령을 실행합니다.

root@computer:~# netcat -u 1.2.3.5 4444
test

F에서 다음 명령을 동시에 실행하십시오.

root@computer:~# nc -ul 4444
test

질문

내가 직면한 문제는 컴퓨터(E) 중 하나가 특정 IP(1.2.3.5)에 대한 IP 패킷을 수신하지만 이를 기본 게이트웨이로 전달하지 않는다는 것입니다.

내가 놓친 것은 tun0 인터페이스에서 들어오는 패킷을 eth0 인터페이스의 기본 게이트웨이로 라우팅하는 E의 명령이라고 생각합니다.

내가 어떤 명령을 놓쳤는지 아는 사람 있나요?

답변1

Celada가 제안한 비활성화로 해결된 라우팅 문제역방향 경로 필터링/etc/sysctl.conf 파일을 수정하여

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

이제 이 설정을 완료하려면 ISP의 업스트림 역방향 경로 필터링을 피하기 위해 패킷을 E와 B를 통해 다시 라우팅해야 한다는 것을 깨달았습니다.

관련 정보