업데이트 1

업데이트 1

두 개의 네트워크 인터페이스에 대해 다음을 구성했습니다.

eth1 10.93.90.1(프로덕션 네트워크)
eth0 192.160.0.1(사설 네트워크/Labb 네트워크)

eth1을 통해 프로덕션 네트워크와 통신할 수 있도록 NAT를 사용하여 eth0을 구성하고 싶습니다.

내가 시도한 것은 다음과 같습니다.

[email protected] # echo 1 > /proc/sys/net/ipv4/ip_forward
[email protected] # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
[email protected] # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
[email protected] # iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

그러나 IP 주소가 192.168.0.236인 eth0 인터페이스에 연결된 노드는 프로덕션 네트워크(10.0.0.0)의 다른 노드와 통신할 수 없습니다. 하지만 호스트와 통신할 수는 있습니다.

[email protected] # ping 10.93.90.1
10.93.90.1 is alive!

그러나 프로덕션 네트워크의 다른 호스트도 마찬가지입니다.

[email protected] # ping 10.93.89.1
No response from 10.93.89.1

호스트 자체에서 ping을 실행하면 정상적으로 작동합니다.

[email protected] # ping 10.93.89.1
PING 10.93.89.1 (10.93.89.1) 56(84) bytes of data.

여기서 뭔가 빠졌나요? 아니면 NAT만으로는 불가능합니까?

업데이트 1

호스트 eth1(10.93.90.1)에 대한 라우팅 테이블:

[email protected] # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use   Iface
default         fafne-vlan93.se 0.0.0.0         UG    0      0        0     eth1
10.93.0.0       *               255.255.0.0     U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

호스트 eth0의 라우팅 테이블(192.168.0.236)

[email protected] # ip route list
default via 192.168.0.1 dev eth0 
default dev eth0  scope link  metric 99 
169.254.0.0/16 dev eth0  proto kernel  scope link  src 169.254.221.167 
169.254.0.0/16 dev eth0  scope link  metric 99 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.236

업데이트 2

다음 규칙을 변경했습니다.

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

도착하다:

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

또한 핑을 디버깅하기 위해 다음 규칙을 추가했습니다.

iptables -I FORWARD -j LOG --log-prefix 'SNOOP_'

192.168.0.236에서 10.93.89.1로 핑을 보낼 때 기록한 내용은 다음과 같습니다.

Apr  1 09:14:44 lnxchrispet kernel: [2415274.711664] SNOOP_IN=eth0 OUT=eth1 MAC=90:e2:ba:3c:87:c4:ac:cc:8e:37:47:a6:08:00 SRC=192.168.0.236 DST=10.93.89.1 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9639 DF PROTO=ICMP TYPE=8 CODE=0 ID=0 SEQ=0
Apr  1 09:14:44 lnxchrispet kernel: [2415274.711935] SNOOP_IN=eth1 OUT=eth0 MAC=7c:05:07:0e:36:03:70:54:d2:7c:45:be:08:00 SRC=10.93.89.1 DST=192.168.0.236 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=58826 PROTO=ICMP TYPE=0 CODE=0 ID=0 SEQ=0

업데이트 3

다음은 nat에 의해 로드된 모든 커널 모듈입니다:

[email protected] # lsmod |grep nat
iptable_nat            12928  1 
nf_nat                 18231  2 iptable_nat,ipt_MASQUERADE
nf_conntrack_ipv4      14078  3 nf_nat,iptable_nat
nf_conntrack           52720  5 nf_conntrack_ipv4,nf_nat,iptable_nat,ipt_MASQUERADE,xt_state
ip_tables              22042  2 iptable_nat,iptable_filter
x_tables               19118  6 ip_tables,iptable_nat,ipt_MASQUERADE,iptable_filter,xt_state,ipt_LOG

이 모듈이 누락된 것 같습니다. 관련이 있나요?

nf_nat_ipv4

로드를 시도했지만 작동하지 않는 것 같습니다.

[email protected] # modprobe -v nf_nat_ipv4
[email protected] # lsmod |grep nat
iptable_nat            12928  1 
nf_nat                 18231  2 iptable_nat,ipt_MASQUERADE
nf_conntrack_ipv4      14078  3 nf_nat,iptable_nat
nf_conntrack           52720  5 nf_conntrack_ipv4,nf_nat,iptable_nat,ipt_MASQUERADE,xt_state
ip_tables              22042  2 iptable_nat,iptable_filter
x_tables               19118  6 ip_tables,iptable_nat,ipt_MASQUERADE,iptable_filter,xt_state,ipt_LOG

업데이트 4

뭔가 잘못된 것 같습니다. NAT용 모듈이 없습니다.

[email protected] # ls -l /lib/modules/3.2.0-4-amd64/kernel/net/netfilter
total 1076
drwxr-xr-x 2 root root   4096 Mar  4 06:42 ipset
drwxr-xr-x 2 root root   4096 Mar  4 06:42 ipvs
-rw-r--r-- 1 root root  10416 Feb 29 18:10 nf_conntrack_amanda.ko
-rw-r--r-- 1 root root   4336 Feb 29 18:10 nf_conntrack_broadcast.ko
-rw-r--r-- 1 root root  14440 Feb 29 18:10 nf_conntrack_ftp.ko
-rw-r--r-- 1 root root  67360 Feb 29 18:10 nf_conntrack_h323.ko
-rw-r--r-- 1 root root  12944 Feb 29 18:10 nf_conntrack_irc.ko
-rw-r--r-- 1 root root 116096 Feb 29 18:10 nf_conntrack.ko
-rw-r--r-- 1 root root   5552 Feb 29 18:10 nf_conntrack_netbios_ns.ko
-rw-r--r-- 1 root root  32528 Feb 29 18:10 nf_conntrack_netlink.ko
-rw-r--r-- 1 root root  14416 Feb 29 18:10 nf_conntrack_pptp.ko
-rw-r--r-- 1 root root  16672 Feb 29 18:10 nf_conntrack_proto_dccp.ko
-rw-r--r-- 1 root root  11912 Feb 29 18:10 nf_conntrack_proto_gre.ko
-rw-r--r-- 1 root root  15192 Feb 29 18:10 nf_conntrack_proto_sctp.ko
-rw-r--r-- 1 root root   8992 Feb 29 18:10 nf_conntrack_proto_udplite.ko
-rw-r--r-- 1 root root  10664 Feb 29 18:10 nf_conntrack_sane.ko
-rw-r--r-- 1 root root  36480 Feb 29 18:10 nf_conntrack_sip.ko
-rw-r--r-- 1 root root   6352 Feb 29 18:10 nf_conntrack_snmp.ko
-rw-r--r-- 1 root root  10240 Feb 29 18:10 nf_conntrack_tftp.ko
-rw-r--r-- 1 root root  11400 Feb 29 18:10 nfnetlink.ko
-rw-r--r-- 1 root root  20120 Feb 29 18:10 nfnetlink_log.ko
-rw-r--r-- 1 root root  18920 Feb 29 18:10 nfnetlink_queue.ko
-rw-r--r-- 1 root root   4952 Feb 29 18:10 nf_tproxy_core.ko
-rw-r--r-- 1 root root  44016 Feb 29 18:10 x_tables.ko
-rw-r--r-- 1 root root   6904 Feb 29 18:10 xt_addrtype.ko
-rw-r--r-- 1 root root   7688 Feb 29 18:10 xt_AUDIT.ko
-rw-r--r-- 1 root root   4912 Feb 29 18:10 xt_CHECKSUM.ko
-rw-r--r-- 1 root root   4384 Feb 29 18:10 xt_CLASSIFY.ko
-rw-r--r-- 1 root root   5440 Feb 29 18:10 xt_cluster.ko
-rw-r--r-- 1 root root   4144 Feb 29 18:10 xt_comment.ko
-rw-r--r-- 1 root root   5480 Feb 29 18:10 xt_connbytes.ko
-rw-r--r-- 1 root root   8776 Feb 29 18:10 xt_connlimit.ko
-rw-r--r-- 1 root root   6560 Feb 29 18:10 xt_connmark.ko
-rw-r--r-- 1 root root   6272 Feb 29 18:10 xt_CONNSECMARK.ko
-rw-r--r-- 1 root root   7032 Feb 29 18:10 xt_conntrack.ko
-rw-r--r-- 1 root root   4400 Feb 29 18:10 xt_cpu.ko
-rw-r--r-- 1 root root   7232 Feb 29 18:10 xt_CT.ko
-rw-r--r-- 1 root root   6376 Feb 29 18:10 xt_dccp.ko
-rw-r--r-- 1 root root   4352 Feb 29 18:10 xt_devgroup.ko
-rw-r--r-- 1 root root   5448 Feb 29 18:10 xt_dscp.ko
-rw-r--r-- 1 root root   6176 Feb 29 18:10 xt_DSCP.ko
-rw-r--r-- 1 root root   4704 Feb 29 18:10 xt_esp.ko
-rw-r--r-- 1 root root  17592 Feb 29 18:10 xt_hashlimit.ko
-rw-r--r-- 1 root root   5280 Feb 29 18:10 xt_helper.ko
-rw-r--r-- 1 root root   4472 Feb 29 18:10 xt_hl.ko
-rw-r--r-- 1 root root   5896 Feb 29 18:10 xt_HL.ko
-rw-r--r-- 1 root root  10888 Feb 29 18:10 xt_IDLETIMER.ko
-rw-r--r-- 1 root root   4848 Feb 29 18:10 xt_iprange.ko
-rw-r--r-- 1 root root   5672 Feb 29 18:10 xt_ipvs.ko
-rw-r--r-- 1 root root   8168 Feb 29 18:10 xt_LED.ko
-rw-r--r-- 1 root root   4456 Feb 29 18:10 xt_length.ko
-rw-r--r-- 1 root root   6480 Feb 29 18:10 xt_limit.ko
-rw-r--r-- 1 root root   4200 Feb 29 18:10 xt_mac.ko
-rw-r--r-- 1 root root   4936 Feb 29 18:10 xt_mark.ko
-rw-r--r-- 1 root root   5144 Feb 29 18:10 xt_multiport.ko
-rw-r--r-- 1 root root   4536 Feb 29 18:10 xt_NFLOG.ko
-rw-r--r-- 1 root root   6080 Feb 29 18:10 xt_NFQUEUE.ko
-rw-r--r-- 1 root root   4792 Feb 29 18:10 xt_NOTRACK.ko
-rw-r--r-- 1 root root   9536 Feb 29 18:10 xt_osf.ko
-rw-r--r-- 1 root root   4272 Feb 29 18:10 xt_owner.ko
-rw-r--r-- 1 root root   5192 Feb 29 18:10 xt_physdev.ko
-rw-r--r-- 1 root root   4224 Feb 29 18:10 xt_pkttype.ko
-rw-r--r-- 1 root root   5896 Feb 29 18:10 xt_policy.ko
-rw-r--r-- 1 root root   5120 Feb 29 18:10 xt_quota.ko
-rw-r--r-- 1 root root   5960 Feb 29 18:10 xt_rateest.ko
-rw-r--r-- 1 root root   8968 Feb 29 18:10 xt_RATEEST.ko
-rw-r--r-- 1 root root   4072 Feb 29 18:10 xt_realm.ko
-rw-r--r-- 1 root root  20136 Feb 29 18:10 xt_recent.ko
-rw-r--r-- 1 root root   5432 Feb 29 18:10 xt_sctp.ko
-rw-r--r-- 1 root root   6856 Feb 29 18:10 xt_SECMARK.ko
-rw-r--r-- 1 root root  10432 Feb 29 18:10 xt_set.ko
-rw-r--r-- 1 root root   8704 Feb 29 18:10 xt_socket.ko
-rw-r--r-- 1 root root   5056 Feb 29 18:10 xt_state.ko
-rw-r--r-- 1 root root   5232 Feb 29 18:10 xt_statistic.ko
-rw-r--r-- 1 root root   5088 Feb 29 18:10 xt_string.ko
-rw-r--r-- 1 root root   5024 Feb 29 18:10 xt_tcpmss.ko
-rw-r--r-- 1 root root   8496 Feb 29 18:10 xt_TCPMSS.ko
-rw-r--r-- 1 root root   5616 Feb 29 18:10 xt_TCPOPTSTRIP.ko
-rw-r--r-- 1 root root   6376 Feb 29 18:10 xt_tcpudp.ko
-rw-r--r-- 1 root root   9216 Feb 29 18:10 xt_TEE.ko
-rw-r--r-- 1 root root   6024 Feb 29 18:10 xt_time.ko
-rw-r--r-- 1 root root  10848 Feb 29 18:10 xt_TPROXY.ko
-rw-r--r-- 1 root root   4184 Feb 29 18:10 xt_TRACE.ko
-rw-r--r-- 1 root root   5176 Feb 29 18:10 xt_u32.ko

Debian Wheezy 시스템의 현재 커널은 3.2.0-4-amd64입니다.

[email protected] # uname -r
3.2.0-4-amd64
[email protected] # lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.9 (wheezy)
Release:    7.9
Codename:   wheezy

wheezy-backports 커널 3.16.0-0.bpo.4-amd64를 설치해 보겠습니다.

업데이트 5

wheezy-backports 커널 3.16.0-0.bpo.4-amd64를 부팅한 후 올바른 모듈을 로드할 수 있습니다.

[email protected] # uname -r
3.16.0-0.bpo.4-amd64

[email protected] # modprobe -v iptable_nat
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/netfilter/x_tables.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/netfilter/nf_conntrack.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/netfilter/nf_nat.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/ipv4/netfilter/ip_tables.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/ipv4/netfilter/iptable_nat.ko

[email protected] # lsmod |grep nat
iptable_nat            12646  1 
ip_tables              25967  2 iptable_filter,iptable_nat
nf_nat_ipv4            12912  1 iptable_nat
nf_nat                 18159  3 ipt_MASQUERADE,nf_nat_ipv4,iptable_nat
nf_conntrack           91426  6 ipt_MASQUERADE,nf_nat,xt_state,nf_nat_ipv4,iptable_nat,nf_conntrack_ipv4

답변1

그러므로 Debian Wheezy 설치에는 결함이 있는 커널이 있거나 NAT를 완전히 지원하지 않는 것 같습니다. nf_nat_ipv4여기에서 볼 수 있듯이 특정 커널 모듈이 없습니다 .

[email protected] # lsmod |grep nat
iptable_nat            12928  1 
nf_nat                 18231  2 iptable_nat,ipt_MASQUERADE
nf_conntrack_ipv4      14078  3 nf_nat,iptable_nat
nf_conntrack           52720  5 nf_conntrack_ipv4,nf_nat,iptable_nat,ipt_MASQUERADE,xt_state
ip_tables              22042  2 iptable_nat,iptable_filter
x_tables               19118  6 ip_tables,iptable_nat,ipt_MASQUERADE,iptable_filter,xt_state,ipt_LOG

3.16.0-0.bpo.4-amd64 커널 설치

Debian Wheezy의 기본 커널은 입니다 3.2.0-4-amd64. 따라서 wheezy-backports 커널을 설치했습니다 3.16.0-0.bpo.4-amd64.

[email protected] # apt-get update
[email protected] # apt-get install linux-image-3.16.0-0.bpo.4-amd64 linux-headers-3.16.0-0.bpo.4-all-amd64

The following packages have unmet dependencies:
 linux-image-3.16.0-0.bpo.4-amd64 : Depends: initramfs-tools (>= 0.110~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

APT는 올바른 initramfs-tools 패키지를 종속성으로 설치할 수 없다고 불평합니다. 그래서 wheezy-backports 주먹으로 설치해야 했습니다.

[email protected] # apt-get -t wheezy-backports install initramfs-tools

3.16.0-0.bpo.4-amd64그런 다음 커널을 설치할 수 있습니다 .

[email protected] # apt-get install linux-image-3.16.0-0.bpo.4-amd64 linux-headers-3.16.0-0.bpo.4-all-amd64

그런 다음 시스템을 재부팅하고 NAT 커널 모듈을 계속 로드했습니다.

NAT 커널 모듈 로드

먼저 올바른 커널이 로드되었는지 확인합니다.

[email protected] # uname -r
3.16.0-0.bpo.4-amd64

시스템은 현재 백포트된 커널을 실행 중입니다. 그런 다음 NAT 커널 모듈을 로드합니다.

[email protected] # modprobe -v iptable_nat
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/netfilter/x_tables.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/netfilter/nf_conntrack.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/netfilter/nf_nat.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/ipv4/netfilter/ip_tables.ko 
insmod /lib/modules/3.16.0-0.bpo.4-amd64/kernel/net/ipv4/netfilter/iptable_nat.ko

[email protected] # lsmod |grep nat
iptable_nat            12646  1 
ip_tables              25967  2 iptable_filter,iptable_nat
nf_nat_ipv4            12912  1 iptable_nat
nf_nat                 18159  3 ipt_MASQUERADE,nf_nat_ipv4,iptable_nat
nf_conntrack           91426  6 ipt_MASQUERADE,nf_nat,xt_state,nf_nat_ipv4,iptable_nat,nf_conntrack_ipv4

NAT 테스트

그런 다음 부팅 후 사라졌기 때문에 IP 전달과 NAT를 다시 구성했습니다.

[email protected] # echo 1 > /proc/sys/net/ipv4/ip_forward
[email protected] # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

그런 다음 192.168.0.236에서 핑을 테스트했는데 결과는 성공적이었습니다.

[email protected] # ping 10.93.89.1
10.93.89.1 is alive!

결론적으로

문제는 올바른 NAT 커널 모듈을 로드할 수 없다는 것이었습니다. 이 문제를 해결하려면 wheezy-backports에서 커널을 설치하고 NAT 커널 모듈을 로드해야 했습니다.

관련 정보