내 목표는: 시스템에는 두 개의 네트워크 인터페이스가 있으며 eth0
둘 tap0
다 인터넷에 연결되어 있습니다. 서비스/프로그램을 선택적으로 바인딩할 수 있어야 합니다.
아파치 예:다음과 같은 가상 호스트를 만들고 싶습니다.
site1.example.com
85.xxx.49.100
다음에서 사용 가능 하도록 바인딩eth0
site2.example.com
89.xxx.xxx.5
다음에서 사용 가능 하도록 바인딩tap0
site3.example.com
89.xxx.xxx.4
다음에서 사용 가능 하도록 바인딩tap0
eth0
기본적으로 시스템의 프로그램은 다음 방법을 사용하여 외부 세계와 통신합니다.하지만또한 원하는 경우 IP에 바인딩하여 tap0
들어오고 나가는 트래픽에 사용할 수 있습니다.예speedtest-cli --source="85.xxx.49.100"
: (IP at eth0
) 및 speedtest-cli --source="89.xxx.xxx.4"
(IP at ) 을 실행할 수 있어야 합니다 tap0
.
eth0
DHCPd 서버에서 IP, 게이트웨이, DNS 서버를 가져오는 물리적 이더넷 인터페이스가 있는 Debian 시스템이 있습니다 . 그것은 /etc/network/interfaces
다음과 같습니다:
allow-hotplug eth0
no-auto-down eth0
iface eth0 inet dhcp
네트워크가 온라인 상태가 되면 라우팅 테이블은 다음과 같습니다.
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 85.xxx.xxx.1 0.0.0.0 UG 0 0 0 eth0
85.xxx.49.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
이제 tap
이 컴퓨터에 장치를 추가했습니다(OpenVPN을 사용하여). 이것OpenVPN 클라이언트그리고서버는 IP 주소를 할당하지 않습니다. 아이디어는 머신 사이에 레이어 2만 두는 것입니다. OpenVPN 서버 구성은 다음과 같습니다.
local 89.xxx.xxx.8
port xxxx
proto udp
dev tap0
mode server
tls-server
user nobody
group nogroup
tls-version-min 1.2
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
script-security 1
client-to-client
keepalive 10 60
compress
max-clients 10
cipher AES-256-CBC
persist-key
persist-tun
서버의 네트워크 구성은 다음과 같습니다.
10-정적-eth0.network
[Match]
Name=eth0
[Network]
Bridge=br0
25-br0.netdev
[NetDev]
Name=br0
Kind=bridge
25-br0.network
[Match]
Name=br0
[Network]
DHCP=no
Address=89.xxx.xxx.8/24
Address=89.xxx.xxx.7/24
Address=89.xxx.xxx.6/24
Gateway=89.xxx.xxx.1
DNS=1.1.1.1
DNS=8.8.8.8
30-탭 네트워크
[Match]
Name=tap0
[Network]
Bridge=br0
OpenVPN이 시작되면 클라이언트 장치로 들어오는 모든 이더넷 프레임이 tap0
서버에서 전송됩니다. br0
이론적으로 이것은의미는저 할 수 있어요서버용으로 예약된 IP 주소를 tap0
클라이언트의 장치 에 할당. 클라이언트 장치에 IP를 추가해 보았습니다 tap
.
ip addr add 89.xxx.xxx.5/24 broadcast 89.xxx.xxx.255 dev tap0
ip link set tap0 up
route add default gw 89.xxx.xxx.1 metric 200
ip route add 89.xxx.xxx.8 via 85.xxx.xxx.1 dev eth0
IP가 있고 다음을 사용하여 Google에 핑을 보낼 수 있지만 ping -I eth0 google.com
예 를 들어 소스 세트를 ping -I tap0 google.com
사용할 수는 없습니다. 시간이 초과됩니다.wget
89.xxx.xxx.5
어떻게 진행해야 하나요? 감사해요.
답변1
이 질문에는 현실과 일치하지 않는 네트워크 작동 방식에 대한 다양한 가정이 있습니다.
원격 서버의 네트워크에 연결되는 탭 장치를 이 컴퓨터에 추가했습니다.
"탭 장치를 원격 서버의 네트워크에 연결"할 수 없습니다. 탭 장치는 애플리케이션이 네트워크 인터페이스를 제어하는 방법입니다. Tap 장치에 연결된 애플리케이션이 없으면 Tap 장치는 어떤 작업도 수행하지 않습니다.
내가 이해한 바에 따르면 데비안 시스템의 장치로 들어오는 모든 이더넷 프레임은
tap
서버 브리지를 통해 전송되어야 합니다.br0
아니요.
당신이 할 수 있는 일은 일종의 터널(OpenVPN, Tinc, wiredeguard; 다양한 옵션이 있음)을 사용하는 것입니다. 이 터널은 Debian 컴퓨터(탭 또는 기타)에 네트워크 인터페이스를 생성하고 서버에 네트워크 인터페이스를 생성합니다.서버에서, 이 장치를 나가는 네트워크 인터페이스에 연결할 수 있습니다.데비안 머신에서, 외부 네트워크를 가정하여 이 장치에 두 개의 IP 주소( 89.xxx.xxx.5
및 ) 를 제공할 수 있습니다.89.xxx.xxx.6
서버에서이것들도 할당될 수 있습니다.
두 개의 기본 경로를 사용하지 마십시오. 단일 기본 경로를 사용하고 Apache를 Debian 시스템의 세 인터넷 주소 각각에 바인딩합니다.
편집하다
다른 답변에 자세히 설명된 대로 이미 작동하는 솔루션이 있지만 참고용으로만 사용하세요.
- OpenVPN의 경로라우팅 서브넷
- 주석 다리초기 요구사항을 충족하여 즉시 사용 가능
답변2
읽고 나서http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.htmliptables
나는 창의력을 발휘했고 iproute2
이것이 내 사용 사례에 적합한 것 같습니다.
- OpenVPN 클라이언트를 시작하여
tap0
클라이언트가 생성되고 L2가 작동하는지 확인합니다. 89.xxx.xxx.5
장치에 할당 하고 링크 설정:
ip addr add 89.xxx.xxx.5/24 broadcast 89.xxx.xxx.255 dev tap0
ip link set tap0 up
- IP 주소와 함께 사용할 보조 라우팅 테이블과 태그를 생성
tap0
하고 경로를 추가합니다.
echo "1 BRIDGESERVER" >> /etc/iproute2/rt_tables
ip route add default via 89.xxx.xxx.1 dev tap0 table BRIDGESERVER
ip route add 89.xxx.xxx.8 via 85.xxx.xxx.1 dev eth0 # xxx.8 is the VPN server and xxx.1 is the local gateway
ip route add 0.0.0.0/1 via 89.xxx.xxx.1 dev tap0 table BRIDGESERVER
ip route add 128.0.0.0/1 via 89.xxx.xxx.1 dev tap0 table BRIDGESERVER
ip route show table BRIDGESERVER
ip rule add from all fwmark 0x1 lookup BRIDGESERVER
- 보조 라우팅 테이블/기본 게이트웨이를 사용하도록
iptables
할당된 IP( )에서 들어오고 나가는 모든 tcp/udp 트래픽을 표시 하는 데 사용됩니다 .89.xxx.xxx.5
iptables -t mangle -I PREROUTING -p tcp --destination 89.xxx.xxx.5 -j MARK --set-mark 1
iptables -t mangle -I OUTPUT -p tcp --source 89.xxx.xxx.5 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -p udp --destination 89.xxx.xxx.5 -j MARK --set-mark 1
iptables -t mangle -I OUTPUT -p udp --source 89.xxx.xxx.5 -j MARK --set-mark 1
일부 테스트:
- 바인딩할 소스 IP를 설정하지 않으면 기본적으로 다음 IP가 사용됩니다
eth0
.
speedtest
Retrieving speedtest.net configuration...
Testing from xyz (85.xxx.49.100)...
- 이전에 할당된 IP에 바인딩
tap0
:
speedtest --source=89.xxx.xxx.5
Retrieving speedtest.net configuration...
Testing from cpv (89.xxx.xxx.5)...