iptables : MultiWAN 및 포트 포워딩 및 포트 리디렉션

나이트 드래곤

저는 Gentoo Linux를 실행하고 있으므로 일반 iptbales를 사용하여 방화벽과 네트워킹을 관리합니다. 나는 일반적으로 모든 트래픽에 wan0을 사용하지만 이미 웹 서버가 있으므로 두 번째 웹 서버에 wan1 (다른 도메인에 바인딩)을 원합니다.

세 가지 인터페이스가 있습니다.

  • eth0 = LAN
  • wan0 = 기본 사용 WAN (기본 게이트웨이)
  • wan1 = 보조 WAN

게이트웨이에 대한 몇 가지 정보

> route -n 

Kernel IP Routentabelle
Ziel Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         80.108.x.x      0.0.0.0         UG    0      0        0 wan0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
80.108.x.0      0.0.0.0         255.255.254.0   U     0      0        0 wan0
84.114.y.0      0.0.0.0         255.255.255.0   U     0      0        0 wan1
127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo

NAT / MASQUEARDING의 기본 초기화는 다음과 같습니다.

sysctl -q -w net.ipv4.conf.all.forwarding=1

iptables -N BLOCK
iptables -A BLOCK -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i eth0 -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i lo -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/16 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan1 -j MASQUERADE

이 게이트웨이 뒤에서 여러 웹 서버를 실행하고 있습니다. 한 컴퓨터에서 80 대신 포트 8000에서 HTTP 서버를 실행하고 있습니다. 일반적으로 들어오는 인터페이스로 wan0을 사용할 때 다음 규칙을 사용합니다.

lan_host1="192.168.0.200"
iptables -A FORWARD -i wan0 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan0 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80

잘 작동합니다. 이제 wan0이 일반적으로 다른 용도로 사용하는 IP / 도메인에 연결되어 있으므로 wan1을 사용하고 싶습니다.

나는 wan1에 대한 간단한 변경이 그것을 할 것이라고 생각했습니다.

lan_host1="192.168.0.200"
iptables -A FORWARD -i wan1 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan1 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80

그러나 그것은 작동하지 않습니다. 문제는 wan0이 기본 GW라는 것입니다. 그래서 wan1에서받은 패키지는 lan_host1로 전달되지만 게이트웨이로 다시 보낼 때 wan1 대신 wan0을 통해 보내거나 적어도 wan0의 ip를 사용합니다.

내가 이것을 어떻게 관리 할 수 ​​있는지 어떤 제안?

미리 감사드립니다, Rob

AB

대답은 구성과 관련이 있으므로 몇 가지 가정을합니다. 실제 구성에 맞게 대답을 조정해야합니다.

  • WAN1 용의 LAN 및 게이트웨이 WAN1은 임의로 84.114.7.0/24 및 84.114.7.254 선정.

  • 방화벽 규칙을 고려하지 않았지만이 모든 것이 규칙과 상호 작용해서는 안됩니다.

리눅스 ip link, ip address그리고 ip route항상 사용 대신에 사용되지해야 ifconfig하고 route. route어쨌든 추가 라우팅 테이블을 처리 할 수 ​​없습니다.

알림처럼 iptables 또는 실제로 netfilter 는 라우팅하지 않지만 작업에 의해 IP 라우팅 스택에서 내린 라우팅 결정을 변경할 수 있습니다. 회로도 는 라우팅 결정이 발생할 수있는 위치를 보여줍니다. 한곳에 만있는 라우팅 된 (로컬에서 시작된 것이 아닌) 트래픽의 경우, raw / PREROUTING , mangle / PREROUTING 또는 nat / PREROUTING , raw / PREROUTING , mangle / PREROUTING 또는 nat / PREROUTING , 원시는 종종 비실용적이며 제한된 경우에만 nat 는 대부분 mangle을 남깁니다 .

기본 멀티 홈 시스템은 일반적으로 필요, 인터넷에 여러 경로를 사용하는 정책 라우팅 경로가 평소와 같이 대상으로뿐만 아니라 변경할 수있는뿐만 아니라 (여기에 완료 될 것이다)에 사용되는 소스 또는 다른 선택기와, 정책 규칙. Linux에서로 만든 추가 규칙은 ip rule다른 라우팅 테이블을 선택하여 예를 들어 다른 기본 경로를 선택할 수 있습니다 (아직 기본 경로는 하나만 있지만 라우팅 테이블 당 하나 ).

활성 상태로 유지하면서 그래서 여기에 원칙은 엄격한 리버스 경로 포워딩 ( rp_filter를 )에서 오는 패킷 동의하는 것입니다 WAN1 과 대한 평소와 같이 경로를 eth0를 (통과 할 수 있도록 대체 테이블을 사용하여 rp_filter를 ). 이 추가 라우팅 테이블은 기본 라우팅 테이블을 복제해야하지만 대체 경로 ( wan1 )에 필요한 경로 만 사용 하므로 "일반"경로 ( wan0 )가 있는 일반 경로는 포함되지 않습니다 . wan1을 통과하는 흐름에 다른 경로 (VPN 등)가 포함되어야하는 경우, 경로도 추가해야하거나 이에 대처하기 위해 다른 추가 규칙 및 테이블을 만들어야 할 가능성이 있습니다.

Linux가 커널 3.6에서 라우팅 캐시 사용을 중단했기 때문에 라우팅 스택의 어떤 것도 wan1을 통해 host1 에서 클라이언트 로 응답 패킷을 다시 보내도록 지시하지 않으며 결국 wan0을 통해 기본 기본 경로를 사용하여 나가게 됩니다. 이 인터페이스에 대한 잘못된 IP ( netfilter 는 경로에 구애받지 않고 연결의 첫 번째 패킷을 수신 할 때 수행 할 NAT를 이미 선택 했음) 및 Strict Reverse Path Filtering을 수행하는 ISP의 다음 라우터에 의해 삭제되었을 수 있습니다. conntrack 마크에있는 패킷 마크를 복사하여 다시 패킷에 넣을 수 있는 netfilter 기능이 있습니다. 이것은 연결을위한 경로 메모리 역할을합니다. 그래서 iptablesnetfilterconntrack 은 라우팅 결정을 변경하기 위해 패킷을 표시하고 동일한 연결의 일부로 식별 된 응답 패킷에이 표시를 복원하는 두 가지 관련 기능에 사용됩니다.

이 모든 것이 다음 명령으로 변환됩니다.

  • 라우팅 부품

    표시된 패킷 (임의 표시 값 101)에 추가 라우팅 테이블 (관련없는 임의 값도 101) 사용 :

    ip rule add fwmark 101 lookup 101
    

    wan0 항목을 기본 라우팅 테이블 과 유사한 항목으로 테이블을 채 웁니다 .

    ip route add table 101 192.168.0.0/16 dev eth0
    ip route add table 101 84.114.7.0/24 dev wan1
    ip route add table 101 default via 84.114.7.254 dev wan1
    
  • iptables / netfilter 부분

    다음 명령에서 다양한 최적화가 가능합니다. 아마도 개선 될 수 있습니다.

    이미 저장된 잠재적 이전 표시를 복원하므로 응답 패킷은 원래 패킷과 동일한 표시를 갖게됩니다.

    iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
    

    위의 라우팅 결정을 변경하려면 wan1 에서 도착하는 패킷을 표시하십시오 .

    iptables -t mangle -A PREROUTING -i wan1 -j MARK --set-mark 101 
    

    표시가있는 경우 conntrack에 저장합니다 ( 모든 패킷이 아닌 연결 흐름 당 한 번만 수행 하도록 nat 테이블에서 수행 할 수 있음).

    iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j CONNMARK --save-mark
    

문서화되지 않은 기능 이 2010 년에 추가 되었기 때문에 실제로 이것은 Strict Reverse Path Forwarding 검사에 여전히 실패합니다 . 여기에서 사용해야합니다.

sysctl -w net.ipv4.conf.wan1.src_valid_mark=1

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

DNS 조회 IP 및 포트를 리디렉션하는 Iptables

분류에서Dev

ubuntu iptables NAT 및 라우터 및 포트 포워딩

분류에서Dev

DVR 및 포트 포워딩

분류에서Dev

iptables 및 firejail 샌드 박스를 사용한 포트 포워딩

분류에서Dev

SSH / Wget 및 포트 리디렉션

분류에서Dev

SSH 터널 / 포워딩 및 iptables

분류에서Dev

라우터 포트 포워딩 및 SSH

분류에서Dev

IPTables ssh 포트 리디렉션

분류에서Dev

iptables-포트 80으로 향하는 로컬 및 일시적 아웃 바운드 트래픽을 포트 8080으로 리디렉션

분류에서Dev

포트 포워딩-포트 2000 및 2222 만 나타남

분류에서Dev

iptables 및 라우터 포트 전달

분류에서Dev

IPTable 및 포트 리디렉션 Apache2

분류에서Dev

stdin 및 stdout을 포트로 리디렉션

분류에서Dev

Curl HTTP 포스트 로그인 및 리디렉션

분류에서Dev

포트 80에서 Jenkins 및 Sonatype Nexus 리디렉션

분류에서Dev

IPTables-다른 IP 및 포트로 포트 (내부에서)

분류에서Dev

특정 IP 및 포트에 대한 iptables 관리

분류에서Dev

SSH 터널, 포트 포워딩 및 서비스

분류에서Dev

포트 포워딩 및 패킷에 대한 약간의 의심

분류에서Dev

포트 포워딩 및 패킷에 대한 약간의 의심

분류에서Dev

라우터 및 VoIP 라우터 뒤의 포워딩 포트

분류에서Dev

nftables를 사용한 포트 포워딩 및 NAT

분류에서Dev

nginx 및 docker-포워딩 포트 80/443에서 3000으로

분류에서Dev

iptables를 사용하여 포트 포워딩과 함께 보조 네트워크 인터페이스 트래픽을 tun0 (OpenVPN)으로 리디렉션

분류에서Dev

iptables 포트 리디렉션이 작동하지 않음

분류에서Dev

포트 8080 및 22 리디렉션 2222가 작동하지 않음

분류에서Dev

PHP 포스트 동적 리디렉션 및 양식 다시 제출 방지

분류에서Dev

포트 포워딩에서 '로컬 포트', '로컬 포트', '원격 포트'및 '원격 포트'는 무엇입니까?

분류에서Dev

특정 IP 및 포트에서 들어오는 iptables 규칙

Related 관련 기사

  1. 1

    DNS 조회 IP 및 포트를 리디렉션하는 Iptables

  2. 2

    ubuntu iptables NAT 및 라우터 및 포트 포워딩

  3. 3

    DVR 및 포트 포워딩

  4. 4

    iptables 및 firejail 샌드 박스를 사용한 포트 포워딩

  5. 5

    SSH / Wget 및 포트 리디렉션

  6. 6

    SSH 터널 / 포워딩 및 iptables

  7. 7

    라우터 포트 포워딩 및 SSH

  8. 8

    IPTables ssh 포트 리디렉션

  9. 9

    iptables-포트 80으로 향하는 로컬 및 일시적 아웃 바운드 트래픽을 포트 8080으로 리디렉션

  10. 10

    포트 포워딩-포트 2000 및 2222 만 나타남

  11. 11

    iptables 및 라우터 포트 전달

  12. 12

    IPTable 및 포트 리디렉션 Apache2

  13. 13

    stdin 및 stdout을 포트로 리디렉션

  14. 14

    Curl HTTP 포스트 로그인 및 리디렉션

  15. 15

    포트 80에서 Jenkins 및 Sonatype Nexus 리디렉션

  16. 16

    IPTables-다른 IP 및 포트로 포트 (내부에서)

  17. 17

    특정 IP 및 포트에 대한 iptables 관리

  18. 18

    SSH 터널, 포트 포워딩 및 서비스

  19. 19

    포트 포워딩 및 패킷에 대한 약간의 의심

  20. 20

    포트 포워딩 및 패킷에 대한 약간의 의심

  21. 21

    라우터 및 VoIP 라우터 뒤의 포워딩 포트

  22. 22

    nftables를 사용한 포트 포워딩 및 NAT

  23. 23

    nginx 및 docker-포워딩 포트 80/443에서 3000으로

  24. 24

    iptables를 사용하여 포트 포워딩과 함께 보조 네트워크 인터페이스 트래픽을 tun0 (OpenVPN)으로 리디렉션

  25. 25

    iptables 포트 리디렉션이 작동하지 않음

  26. 26

    포트 8080 및 22 리디렉션 2222가 작동하지 않음

  27. 27

    PHP 포스트 동적 리디렉션 및 양식 다시 제출 방지

  28. 28

    포트 포워딩에서 '로컬 포트', '로컬 포트', '원격 포트'및 '원격 포트'는 무엇입니까?

  29. 29

    특정 IP 및 포트에서 들어오는 iptables 규칙

뜨겁다태그

보관