동일한 물리적 네트워크에 있는 두 서브넷 사이에 게이트웨이 설정

동일한 물리적 네트워크에 있는 두 서브넷 사이에 게이트웨이 설정

고정 IP를 사용하는 기존 네트워크(192.168.1.)가 포함된 물리적 계층에서 DHCP 지원 네트워크(192.168.2.)를 구성해야 합니다. 두 개의 인터페이스(서버와 인터페이스 모두 가상임)가 있는 Debian 7 서버가 있고 IP를 내 네트워크의 게이트웨이로 설정하고 싶습니다. eth0을 사용하여 원래 네트워크(192.168.1.5에 액세스하는 인터넷 게이트웨이)로 패킷을 라우팅하고 eth1을 사용하여 내 네트워크에서 들어오고 나가는 트래픽을 처리합니다.

구성된 경우

eth0      Link encap:Ethernet  HWaddr 00:0c:29:d4:02:1b  
          inet addr:192.168.1.110  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed4:21b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21668983 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10044848 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:10931368249 (10.1 GiB)  TX bytes:2383839079 (2.2 GiB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:d4:02:25  
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed4:225/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14113604 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11269734 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1871598524 (1.7 GiB)  TX bytes:10331981618 (9.6 GiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8158 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8158 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:629690 (614.9 KiB)  TX bytes:629690 (614.9 KiB)

노선

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.5     0.0.0.0         UG    0      0        0 eth0
localnet        *               255.255.255.0   U     0      0        0 eth0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth1

iptables-vL

Chain INPUT (policy ACCEPT 5603K packets, 822M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 138K packets, 8597K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  14M 9542M ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
 398K   27M ACCEPT     all  --  eth1   any     anywhere             anywhere            

Chain OUTPUT (policy ACCEPT 2915K packets, 1432M bytes)
 pkts bytes target     prot opt in     out     source               destination         

iptables-tnat-vL

Chain PREROUTING (policy ACCEPT 607K packets, 49M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 112K packets, 17M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 6893 packets, 977K bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain POSTROUTING (policy ACCEPT 2391 packets, 374K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 363K   24M MASQUERADE  all  --  any    eth0    anywhere             anywhere   

그런 다음 eth1에서 권한 있는 DHCP 서버를 활성화했습니다.

이제 문제는 서버에 대한 연결이 항상 잘 작동한다는 것입니다(여기에 삼바 공유와 MySQL 서버가 있습니다). 그러나 때때로 (무작위로 보임) 클라이언트(주로 Windows 7 또는 XP)가 다양한 시간 동안 실패합니다. 인터넷에 연결하다. 이 경우 192.168.1.110으로 ping할 수 있지만 192.168.1.5로는 ping할 수 없습니다.

부록

FORWARD 체인이 패킷을 삭제한다는 사실이 의심스러워 보였으므로 해당 필터링을 일시적으로 비활성화했습니다.

iptables -A FORWARD -j ACCEPT

이 새로운 규칙을 사용하면 모든 것이 정상입니다. 하지만 아직 정확히 무슨 일이 일어나고 있는지 명확히 해야 합니다...

부록 2

실제 iptables 규칙은 다음과 같습니다.

iptables-저장

# Generated by iptables-save v1.4.14 on Fri Jun 27 20:53:32 2014
*mangle
:PREROUTING ACCEPT [28129147:14012989399]
:INPUT ACCEPT [8479051:1218948772]
:FORWARD ACCEPT [19639349:12792010625]
:OUTPUT ACCEPT [4434912:3183821941]
:POSTROUTING ACCEPT [23940877:15968783924]
COMMIT
# Completed on Fri Jun 27 20:53:32 2014
# Generated by iptables-save v1.4.14 on Fri Jun 27 20:53:32 2014
*nat
:PREROUTING ACCEPT [931027:74896097]
:INPUT ACCEPT [153578:23398245]
:OUTPUT ACCEPT [9169:1292388]
:POSTROUTING ACCEPT [3186:492868]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Jun 27 20:53:32 2014
# Generated by iptables-save v1.4.14 on Fri Jun 27 20:53:32 2014
*filter
:INPUT ACCEPT [2415796:331288771]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1218435:1654003511]
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -j ACCEPT
COMMIT
# Completed on Fri Jun 27 20:53:32 2014

답변1

iptables 체인을 통해 패킷이 흐르는 위치를 진단하는 데 도움이 되도록 -j LOG 매개변수를 사용하고 마지막으로 --log-prefix "kern.log 또는 syslog의 로그를 쉽게 식별할 수 있는 일부 텍스트"를 사용할 수 있습니다. 기본 Accept 정책을 허용할 수 있습니다. 삭제되는 패킷 유형을 더 잘 이해할 수 있도록 로깅이 활성화된 FORWARD 체인 끝에 모든 거부 규칙을 추가합니다.

이 회로도를 볼 수도 있습니다.http://www.linuxnetmag.com/share/issue9/iptables3.jpg, iptables 체인 내의 기본 패킷 흐름을 보여줍니다.

더 나은 답변을 제공하기 위해 정의한 전체 iptable 규칙을 갖는 것이 흥미로울 것입니다.

관련 정보