나는 Linux의 전체 네트워킹에 대해 조금 새로운 사람입니다. 저는 Ubuntu 20.04, Linux 5.4.0-25-generic을 실행하고 있습니다. 나는 다음을 수행하려고 노력하고 있지만 약간 붙어 있습니다.
bond0
내 서버와 인터넷 사이의 로컬 인터페이스인 인터페이스가 있습니다 . 또한 tun1
서버 외부의 모든 트래픽을 암호화하는 OpenVPN 클라이언트도 있습니다 .
기본 포트 bond0
대신 포트 X와 포트 Y를 라우팅하려고 합니다 .tun1
내가 시도한 것:
여기서 이 주제를 봤는데,그러나 어떤 이유에서인지 작동하지 않는 것 같습니다. IP 라우팅 테이블 80을 만들고 가이드가 말한 모든 작업을 수행했지만 tun 대신 본드에서 트래픽이 나오도록 할 수 없습니다.
여전히 외부 IP 주소를 통해 포트에 액세스할 수 없기 때문에 작동하지 않는 것을 알 수 있습니다.
자세한 내용은 다음과 같습니다.
bond0
:192.168.50.34- 라우터: 192.168.50.1
tun1
:10.44.10.6
관련이 있을 수도 있겠지만, 저는 그걸 통해서 OpenVPN 서버도 운영하고 있어서 tun0
그걸 통해서 포워딩도 좀 설정해놨는데, 관련은 없는 것 같아요.
누구든지 이 포트 라우팅이 작동하도록 하기 위해 나에게 또 다른 것을 줄 수 있다면 좋을 것입니다!
고쳐 쓰다
iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 14576 packets, 2179K bytes)
pkts bytes target prot opt in out source destination
14668 2198K CONNMARK all -- * * 0.0.0.0/0 0.0.0.0/0 CONNMARK restore
Chain INPUT (policy ACCEPT 14576 packets, 2179K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 14840 packets, 8224K bytes)
pkts bytes target prot opt in out source destination
14874 8228K markports all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x0
14863 8227K CONNMARK all -- * * 0.0.0.0/0 0.0.0.0/0 CONNMARK save
Chain POSTROUTING (policy ACCEPT 14883 packets, 8227K bytes)
pkts bytes target prot opt in out source destination
Chain markports (1 references)
pkts bytes target prot opt in out source destination
104K 19M MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32400 MARK set 0x80
0 0 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1195 MARK set 0x80
5 469 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 MARK set 0x80
90 11706 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 MARK set 0x80
IP 라우팅 표시 테이블 80
default via 192.168.50.1 dev bond0
192.168.50.0/24 dev bond0 scope link src 192.168.50.34
IP 규칙
0: from all lookup local
32765: from all fwmark 0x80 lookup 80
32766: from all lookup main
32767: from all lookup default
두 번째 업데이트
위의 하이퍼링크 텍스트에서는 결국 패킷을 로컬 인터페이스로 전달하게 됩니다. 서버에서 클라이언트로 아무것도 전송할 수 없지만 다음 명령 중 하나에 버그가 있는 것 같습니다.
iptables -t mangle -I OUTPUT 1 -m mark --mark 0 -j markports
명령을 다음과 같이 변경할 때:
iptables -t mangle -I OUTPUT 1 -m mark --mark 0x80 -j markports
패킷을 서버로 스트리밍할 수 있습니다. 여전히 인터넷을 통해 서버에 액세스할 수 없지만 지금은 다른 문제일 수 있습니다. 앞으로 며칠 안에 tcpdump를 살펴볼 것입니다.
답변1
내가 그랬던 것처럼 논평OP 링크에서 Linux 커널 4.17부터 시작하여 다음을 사용하십시오.iptables(또는 아무것도웹 필터더 이상 관련이 없음)을 사용하여 이 문제를 해결하세요. 이 문제를 처리하는 데 사용할 수 있는 최신 커널에 설명된 새로운 기능kernelnewbies.org:
sport, dport 및 ip proto 매칭을 포함하도록 확장된 fib 규칙 매칭 지원(5-튜플 매칭 지원 완료) 데이터 센터의 정책 기반 라우팅에 대한 일반적인 사용 사례에는 5튜플 일치가 필요합니다.범죄,범죄,범죄,범죄,범죄
따라서 이전 답변의 방식과 다른 세부 정보를 검색하는 대신 이 답변에서 새로운 접근 방식을 구현하겠습니다.
나는 단지 가정한다하나VPN이 실행 중입니다. OP에 설명된 VPN입니다. 다른 VPN과 상호 작용하는지 알 수 있는 정보가 부족합니다.
아무거나 긁어주세요IP 규칙규칙이나iptables이전에 추가된 규칙은 이 문제를 해결하기 위한 시도였습니다.
OP가 보여주는 것처럼 표 80을 유지하십시오.
ip route add table 80 192.168.50.0/24 dev bond0 src 192.168.50.34
ip route add table 80 default via 192.168.50.1
다음으로 추가ip rule
특정 대상 포트를 사용할 때 대체 경로를 선택하는 규칙입니다. 사용 사례나 나머지 토폴로지를 모릅니다(다른 VPN, 서버).반품VPN에서 들어오는 트래픽을 수신 중...), 보안상의 이유로 서버 자체로 제한했으며 서버가 라우팅할 수 있는 어떤 것도 허용하지 않았습니다. 이것이 아래의 목표입니다 iif lo
. 특별한 표현방식이에요현지에서즉, 로컬에서 시작된 나가는(라우팅되지 않은) 트래픽입니다.
ip rule add iif lo ipproto tcp dport 80 lookup 80
ip rule add iif lo ipproto tcp dport 443 lookup 80
ip rule add iif lo ipproto tcp dport 1195 lookup 80
ip rule add iif lo ipproto tcp dport 32400 lookup 80
그럼 나머지는 그냥 쉬어가자엄격한 역방향 경로 전달도착하다느슨한 RPF(이것은 전혀 활성화하지 않는 것과 크게 다르지 않습니다.) 혹시라도긍정적인기본적으로 특정 Linux 배포판에서 반환 트래픽이 삭제되는 것을 방지하려면 다음을 수행하세요.
sysctl -w net.ipv4.conf.bond0.rp_filter=2
그게 다야 :
# ip route get 192.0.2.10
192.0.2.10 dev tun1 src 10.44.10.6 uid 0
cache
# ip route get 192.0.2.10 ipproto tcp dport 80
192.0.2.10 via 192.168.50.1 dev bond0 table 80 src 192.168.50.34 uid 0
cache