이 문제를 해결하려면 iptables와 라우팅 규칙을 모두 설정해야합니다 . 발생한 특정 문제는 나가는 SSH 패킷이 이더넷 인터페이스 대신 익명의 VPN 터널 인터페이스를 통해 라우팅되고 있다는 것입니다. VPN 소프트웨어가 터널 인터페이스를 통해 처리되지 않은 모든 트래픽을 보내도록 라우팅 규칙을 설정했기 때문에 이런 일이 발생합니다. 네트워크 트래픽을 익명화하는 데 좋습니다. 컴퓨터에 SSH 연결을 설정하는 데 좋지 않습니다.
이 문제를 해결하는 몇 가지 방법이 있지만 동일한 상황에서 나를 위해 일한 방법을 알려 드리겠습니다. 우리가해야 할 일은 다음과 같습니다.
- 비 VPN 트래픽을 처리하기 위해 새로운 IP 규칙 테이블 생성
- 특정 넷 필터 마스크로 표시된 패킷에 대한 VPN이없는 테이블을 조회하기 위해 IP 규칙 추가
- VPN이없는 테이블의 모든 트래픽이 터널 대신 이더넷 인터페이스를 사용하도록 지시하는 IP 경로 추가
- 지정된 netfilter 마스크로 모든 SSH 트래픽을 표시하기 위해 iptables 규칙을 추가하십시오.
참고 : 다음을 수행하는 동안 Raspbian과 함께 작업했기 때문에 배포판에 맞게 명령을 약간 조정해야 할 수도 있습니다 .
새로운 IP 규칙 테이블 생성
iproute2의 테이블 정의 파일을 검사하여 시작하십시오. 기존 규칙 테이블의 이름이나 번호를 사용하지 않기를 원합니다.
cat /etc/iproute2/rt_tables
다음 라인을 따라 뭔가를 보게 될 것입니다.
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
위에서 사용하지 않은 새 규칙 테이블의 임의의 숫자와 이름을 선택하십시오. novpn
이 답변의 나머지 부분에 번호 201과 이름 을 사용합니다.
정의를 정의 파일에 직접 추가하거나 선택한 텍스트 편집기에서 편집하십시오.
echo "201 novpn" >> /etc/iproute2/rt_tables
VPN이없는 테이블을 조회하기 위해 새 IP 규칙 추가
넷 필터 마스크를 다루는 기존의 IP 규칙을 확인하십시오.
ip rule show | grep fwmark
grep이 아무 것도 나타나지 않으면 분명합니다. 일부 줄이 인쇄되면 fwmark
각 줄 의 단어 오른쪽에있는 16 진수를 기록해 두십시오 . 현재 사용하지 않는 번호를 선택해야합니다. 기존의 fwmark 규칙이 없으므로 숫자 65를 선택했습니다.
ip rule add fwmark 65 table novpn
이 작업을 수행하면 netfilter 마스크 65가있는 모든 패킷이 새 novpn
테이블 을 조회 하여 패킷을 라우팅하는 방법에 대한 지침을 찾습니다.
이더넷 인터페이스를 사용하도록 새 테이블의 모든 트래픽을 지시하십시오.
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
여기서주의해야 할 것은입니다 dev eth0
. 이렇게하면 novpn
테이블을 통과하는 모든 트래픽이 VPN에서 생성 한 가상 터널 인터페이스 대신 하드웨어 이더넷 인터페이스 만 사용하도록합니다.
이제 새로운 규칙과 경로가 즉시 적용되도록 iproute 캐시를 비울 수있는 좋은시기입니다.
ip route flush cache
지정된 Netfilter 마스크로 모든 SSH 트래픽을 표시하도록 방화벽 규칙에 지시
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
여기에 너무 깊이 설명 할 수있는 옵션이 너무 많습니다. iptables에 대한 매뉴얼 페이지를 읽고 여기에서 무슨 일이 일어나고 있는지 이해하는 것이 좋습니다.
man iptables
간단히 말해, 방화벽의 맹글 테이블 (특수 패킷 처리를 위해)에 출력 규칙을 추가하여 소스 포트 22에서 발생하는 모든 TCP 패킷을 지정된 넷 필터 마스크 65로 표시하도록 지시합니다.
다음은?
이제 SSH를 테스트 할 준비가되었습니다. 모든 것이 잘되면, "로그인"메시지가 나타납니다.
보안을 위해 방화벽 인터페이스에서 들어오는 SSH 요청을 터널 인터페이스에서 삭제하도록 방화벽에 지시하는 것이 좋습니다.
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
위의 모든 지시 사항은 일시적이며 (규칙 테이블 ID 작성 제외) 다음에 컴퓨터를 다시 시작할 때 지워집니다. 그것들을 영구적으로 만드는 것은 내가 당신에게 맡기는 운동입니다.