ko en ko ko ko ja en en zh en pt ko ko ko ko ko ko zh ko ko ko nl ko ko en ko ko ko nl ko ko en ko en nl ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko ko ko en ko ko en ko en ko zh ko uk nl ko ko ko ko ko zh en en en en pt fr en en kn en sv fr en en en en en es fr en en en fr ja en en en en en en en en en fi en hu pt hbs_lat ru en en en en pl ko ko ko ko ko ko ko zh en en pt en en en uz en en fr eo sv en en en es en en en en en en ja en it hu ja eo en de en ko ko en en
유닉스 프로그램을 특정 네트워크 인터페이스에 바인딩 네트워크 인터페이스 (eth1 및 eth2)를 통해 액세스 - How IT
특정 네트워크 인터페이스를 통해 네트워크 액세스가 바인드되도록하면서 프로그램을 어떻게 시작합니까?
동일한 IP (192.168.1.1)를 사용하지만 두 개의 서로 다른 네트워크 인터페이스 (eth1 및 eth2)를 통해 액세스 할 수있는 두 대의 개별 컴퓨터에 액세스하려고합니다.
net-bind -D eth1 -exec {Program 192.168.1.1} net-bind -D eth2 -exec {Program 192.168.1.1}
위의 내용은 primusrun 과 optirun을 통해 수행 된 하드웨어 바인딩에서 영감을 얻은 것 입니다.
도전 과제 : 관련 스레드 에서 제안한 바와 같이 , 사용 된 인터페이스는 프로그램이 아니라 커널이 선택합니다 (따라서 위의 예에서 사전 바인딩 구문).
만족스럽지 않은 관련 솔루션을 찾았습니다. 이들은 사용자 별 네트워크 블랙리스트를 통한 네트워크 인터페이스 바인딩을 기반으로합니다. 즉, 단일 특정 네트워크 인터페이스에만 액세스 할 수있는 사용자로 프로세스를 실행합니다.
Linux의 경우 수퍼 유저에서 이미 답변을 받았습니다. 프로세스마다 다른 네트워크 인터페이스를 사용하는 방법은 무엇입니까? .
가장 인기있는 답변은 LD_PRELOAD트릭을 사용하여 프로그램의 네트워크 바인딩을 변경하지만 최신 커널은 ip프로그램을 통해 노출되는 ‘네트워크 네임 스페이스’라는 훨씬 유연한 기능을 지원합니다 . 이 답변 은 이것을 사용하는 방법을 보여줍니다. 내 자신의 실험에서 다음을 루트로 수행했습니다.
# Add a new namespace called test_ns ip netns add test_ns # Set test to use eth0, after this point eth0 is not usable by programs # outside the namespace ip link set eth0 netns test_ns # Bring up eth0 inside test_ns ip netns exec test_ns ip link set eth0 up # Use dhcp to get an ipv4 address for eth0 ip netns exec test_ns dhclient eth0 # Ping google from inside the namespace ip netns exec test_ns ping www.google.co.uk
unshare및 nsenter명령을 사용하여 네트워크 네임 스페이스를 어느 정도 관리 할 수도 있습니다 . 이를 통해 PID, 사용자 및 마운트 지점을위한 별도의 공간을 만들 수도 있습니다. 자세한 내용은 다음을 참조하십시오.
`nsenter :`를 사용하여 자식 프로세스를 감금하는 신뢰할 수있는 방법
Graeme의 답변을 받고 있습니다. 이것은 단순히 내 문제를 해결하기 위해 그의 제안에 대한 변경 사항을 설명하는 후속 조치입니다.
네임 스페이스 내부의 물리적 인터페이스를 바인딩하는 대신 네트워크 네임 스페이스의 한 쪽 끝과 루트의 한 쪽 끝을 가진 가상 네트워크 인터페이스 쌍을 만들었습니다. 그런 다음 패키지는이 가상 네트워크를 통해 네임 스페이스에서 루트 네임 스페이스로, 물리적 인터페이스로 라우팅됩니다. -따라서 모든 일반 데이터 전송을 실행할 수 있으며 특정 인터페이스에만 액세스 할 수있는 프로세스를 시작할 수 있습니다.
# Create the eth0 network namespace ip netns add eth0_ns # Create the virtual network pair ip link add v_eth0a type veth peer name v_eth0b # Move v_eth0a to the eth0_ns namespace, the virtual pair is now split # between two network namespaces. ip link set v_eth0a netns eth0_ns # Configure the ends of the virtual network pairs ip netns exec eth0_ns ifconfig v_eth0a up {{NAMESPACE_IP}} netmask {{NAMESPACE_NETMASK}} ifconfig v_eth0b up {{ROOT_NS_IP}} netmask {{ROOT_NS_NETMASK}} # Setup routing from namespace to root ip netns exec eth0_ns route add default gw {{ROOT_NS_IP}} dev v_eth0a # Setup IP forwarding echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s {{ROUTE_SOURCE}}/24 -o {{NETWORK_INTERFACE}} -j SNAT --to-source {{ROUTE_TARGET}}
인터페이스가 eth0 및 eth1에 대해 설정되고 해당 네임 스페이스가 eth0_ns 및 eth1_ns 인 경우 지정된 인터페이스에서 다음을 통해 프로그램을 실행할 수 있습니다.
ip netns exec eth0_ns fish ip netns exec eth1_ns fish
솔루션 I : 특정 라이브러리 사전로드
App-Route-Jail : ld_preload를 사용하여 인터페이스 게이트웨이를 강제 실행 (좋은 아이디어이지만 루트 또는 마크 기능이 필요함) 사용법에 대한 자세한 내용은 다음과 같습니다.
Proxybound : ld_preload를 사용하여 프록시를 특정 응용 프로그램에 강제로 적용합니다 (인터페이스 대신 프록시 사용).
강제 바인딩 : 많은 기능이 있지만 바인드 누출 (신뢰할 수 없음)
Bind-Interface-IP : 너무 간단하고 누출 연결 (신뢰할 수 없음)
Bind-IP : 너무 간단하고 연결이 누출 됨 (신뢰할 수 없음)
솔루션 II : Linux 사용자 공간
클래식 리눅스 사용자 공간 ip-netns : 훌륭한 솔루션이지만 루트와 인터페이스가 하나의 단일 사용자 공간에만 존재할 수 있습니다.
Firejail : Firejail은 응용 프로그램이 특정 네트워크를 사용하도록 강제 할 수 있지만 호환성은 제한적입니다 (예 : tun 인터페이스와 호환되지 않음). firejail은 루트가 필요하지 않습니다firejail --dns=8.8.8.8 --noprofile --net=eth0 --ip=192.168.1.1 app-command
netns가 포함 된 Firejail : Firejail은 응용 프로그램이 개별적으로 생성 된 특정 사용자 공간을 사용하도록 할 수 있습니다. 이렇게하면 루트없이 공간 이름을 지정할 수 있습니다firejail --dns=8.8.8.8 --noprofile --netns=nameOfyourNS app-command
가장 무도회와 다리 Firejail : Firejail가 사용하는 응용 프로그램을 강제 할 수 iptables에 가장 무도회와 특정 인터페이스를 ,이 위대하고 루트가 필요하지 않습니다 하지만 이 IP_FORWARD 요구 및 보안에 미치는 영향을 의미 할 수firejail --net=br0 firefox
솔루션 III : Linux iptables
iptables는 이러한 목적으로 사용될 수 있지만 ip_forward가 필요하며 올바르게 구성되지 않은 경우 보안 영향을 암시 할 수 있습니다 ( 예 1 , 예 2 , 예 3 , 예 4).
솔루션 (I, II 및 III) 참고 사항 :
VPN (특히 wireguard)을 사용 중이고이 솔루션을 wireguard 인터페이스 ( 사용자 공간 이있는 wireguard)에 적용하려는 경우 링크 된 지시에 따라 wg 인터페이스를 포함하는 사용자 공간을 만들 수 있습니다 (따라서 VPN 인터페이스로 제한됨) ) 또한 firejail --netns=container루트없이 사용자 공간을 사용할 수 있도록 결합 될 수 있습니다.
인터페이스 게이트웨이를 찾는 방법
게이트웨이를 찾는 많은 솔루션이 있습니다. 여기에 사용 된 게이트웨이를 찾을 수있는 몇 가지 명령이 있습니다.
$ route $ route -n $ ip rule list $ ip route show $ netstat -rn $ cat /etc/network/interfaces $ cat /etc/sysconfig/network-scripts/ifcfg-eth0 $ traceroute www.google.com $ ip route show 0.0.0.0/0 dev eth0
git clone https://github.com/Intika-Linux-Network/App-Route-Jail.git cd Approute-Utils chown 755 make.sh ./make.sh
이 예에서 미래에 표시된 패킷에 대한 경로를 추가하면 (감옥 된 응용 프로그램의 경우) 192.168.1.1강제 게이트웨이로 사용됩니다.이 경로 규칙은 다른 응용 프로그램에는 영향을 미치지 않습니다.이 조작은 시스템 부팅시 한 번만 수행해야합니다 (예 : 이 솔루션을 매일 사용하십시오
ip rule add fwmark 10 table 100 ip route add default via 192.168.1.1 table 100
당신이 감옥에서 응용 프로그램을 시작
wan IP 주소 테스트
MARK=10 LD_PRELOAD=./mark.so wget -qO- ifconfig.me
이 글은 Unix 카테고리에 분류되었고 network-interface, routing 태그가 있으며 소장 마님에 의해 2022-03-02에 작성되었습니다.
← ksh93은 얼마나 빠릅니까? 최대 999999foo bar가 되어야하며 패턴 Ubuntu를 업데이트 할 때“CD / DVD를 넣으십시오”오류를 피하려면 어떻게해야합니까? _Precise Pangolin_ – Release →
특정 결말을 가진 파일이없는 디렉토리 찾기 디렉토리를 표시하고
R에서 eCDF와 신속하게 통합 d\hat{F}_n(y) F^nF^n\hat{F}_nggg 그러나 이것은
Emacs에서 ispell의 개인 사전은 어디에 저장됩니까? 곳은 ispell 개인 사전? 문서가 저장되어있다 http://www.gnu.org/software/emacs/manual/html_node/emacs/Spelling.html가
AUC 대신 정규화 된 Gini Score를 평가로 사용하는 이유는 무엇입니까? Safe Driver Prediction 은 Normalized Gini
내 PHP 설치 경로는 어디입니까 centos를 사용하고
Proudly powered by WordPress