%EB%8A%94%20%EC%A3%BC%20%EC%84%9C%EB%B2%84%20IP%EC%B2%98%EB%9F%BC%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
4개의 연속 IP로 구성된 CentOS 서버가 있습니다:
eth0 5.xx251
eth0:0 5.xx252
eth0:1 5.xx253
eth0:2 5.xx254
문제는 모든 트래픽이 eth0 대신 eth0:0(5.xx252)을 소스 IP로 사용하여 인터넷으로 나간다는 것입니다.
# curl ifconfig.me
5.x.x.252
모든 트래픽이 eth0, 즉 내 기본 IP를 통해 나가도록 하려면 이 문제를 어떻게 해결해야 합니까?
추신: 내 서버는 Xen dom0에서 실행되는 VPS이며 후자는 라우팅 모드 네트워킹으로 구성됩니다.
미리 감사드립니다!
서버 구성
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:x:x:x:x:AE
inet addr:5.x.x.251 Bcast:5.x.x.255 Mask:255.255.255.255
inet6 addr: fe80::x:x:x:x/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14675569 errors:0 dropped:0 overruns:0 frame:0
TX packets:9463227 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4122016502 (3.8 GiB) TX bytes:25959110751 (24.1 GiB)
Interrupt:23
eth0:0 Link encap:Ethernet HWaddr 00:x:x:x:x:AE
inet addr:5.x.x.252 Bcast:5.x.x.255 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:23
eth0:1 Link encap:Ethernet HWaddr 00:x:x:x:x:AE
inet addr:5.x.x.253 Bcast:5.x.x.255 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:23
eth0:2 Link encap:Ethernet HWaddr 00:x:x:x:x:AE
inet addr:5.x.x.254 Bcast:5.x.x.255 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:23
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
5.x.x.251 [fqdn] [hostname]
# cat ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=5.x.x.251
NETMASK=255.255.255.224
SCOPE="peer 5.x.y.82"
# cat ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
ONBOOT=yes
IPADDR=5.x.x.252
NETMASK=255.255.255.224
# cat route-eth0
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=5.x.y.82
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
5.x.y.82 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
5.x.x.224 0.0.0.0 255.255.255.224 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 5.x.y.82 0.0.0.0 UG 0 0 0 eth0
2012년 8월 29일 업데이트
실행하면 오류가 /etc/init.d/network restart
발생합니다 RTNETLINK answers: File exists
. 이는 기본 게이트웨이를 사용하는 다른 네트워크에 대한 또 다른 경로가 있다고 믿게 만듭니다.여기.
# /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: RTNETLINK answers: File exists
[ OK ]
확실한 것은 처음 삭제 ip route del default via 5.x.y.82 dev eth0
한 다음 .251 IP로 다시 추가하면 모든 것이 예상대로 작동한다는 것입니다. 또는 파일 에 명령을
추가하는 방법이 있습니까 ? Debian에서 이 작업을 수행할 수 있다는 것을 알 수 있습니다 (route del
ifcfg-eth0
route-eth0
pre-up ip addr del ...
더 많은 정보), CentOS는 어떻습니까?
답변1
에서이 문서적어도 CentOS 5에서는 올바른 iproute2 명령 인수를 제공하여 경로를 지정할 수 있다고 생각됩니다. ( 섹션을 참조하세요 IP Command Arguments Format
.)
따라서 다음과 같이 작성하는 대신:
# route-eth0
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=5.x.y.82
다음과 같은 파일을 가질 수 있습니다.
default via 5.x.y.82 dev eth0 src 5.x.x.251
하지만 테스트하기에 편리한 Redhat/Redhat 파생 상자가 없습니다.
답변2
별칭 IP 주소가 로컬이 아닌 대상에 대한 소스 주소로 사용되지 않는 경우 기본 경로의 대상과 동일한 서브넷에 있어서는 안 됩니다. 따라서 넷마스크를 255.255.255.255
브로드캐스트 주소로 변경하고 제거하십시오.
답변3
먼저 0.0.0.0 기본 게이트웨이를 지우십시오.
route del -net default
그런 다음 기본 eth0을 기본 게이트웨이 장치로 선언합니다.
route add -net default gw 5.x.y.82 dev eth0
작동해야합니다. 확인
ip ro li
이를 규칙으로 저장하려면 다음과 같은 지저분한 작업을 시도해 보세요.
을 열고 /etc/sysconfig/network-scripts/network-functions
함수를 찾은 add_default_route ()
다음 해당 함수에서 호출 후 find_gateway_dev
로 줄을 추가합니다 GATEWAYDEV="eth0"
.
무슨 일이 일어나는지는 network-functions
스크립트가 어떤 장치가 기본 게이트웨이가 될지 결정한다는 것입니다. sed를 사용하여 게이트웨이 IP에 대한 경로를 검사하고 ip get route to GATEWAY
장치와 일치시킵니다. eth0:0이 매번 하나가 되는 것 같으므로 하드코딩을 통해 GATEWAYDEV="eth0"
eth0이 항상 게이트웨이 장치로 선택되도록 해야 합니다.
이전 버전의 RH에서는 편집 /etc/sysconfig/static-routes
하고 추가 할 수 있었습니다.default via 5.x.y.82 dev eth0
최후의 수단으로 /etc/rc.local
항상 당신의 친구입니다!
답변4
모두 동일한 서브넷에 있으므로 커널은 사용할 하나를 선택합니다. 다음을 실행하여 이를 확인할 수 있습니다.
ip addr list dev eth0
올바르게 작동하려면 iptables 마법을 수행해야 합니다. 다음을 참조하세요