SSH 터널을 통한 IP 전달

SSH 터널을 통한 IP 전달

이 상황에는 3개의 머신이 관련됩니다.

  • 일부 노트북은 어떤 방법으로든 인터넷에 연결됩니다.
  • 두번째표준 ISP(dyndns에서 제공하는 고정 IP: myserver.dyndns.com)를 통해 인터넷에 연결된 서버
  • 다른 서버가 4G 어댑터를 통해 인터넷에 연결되어 있습니다.

<---ISP1 ---ISP 2 --->두번째<---ISP 2 --- 4G --->

autossh4G 동글은 새로 들어오는 연결을 거부하므로 B를 통해 A에서 C로 연결하는 채널 을 설정했습니다 .

autossh -M 0 -N [email protected] -R 10022:127.0.0.1:22 -R 10000:127.0.0.1:10000

좋은 결과.

이제 다음을 입력하여 4G 동글의 웹 인터페이스에 액세스하고 싶습니다.

myserver.dyndns.com:80

그래서 NATing을 시도했습니다.

  • 존재하다두번째:

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:10000
    

    그리고

    iptables -t nat -A POSTROUTING -d 127.0.0.1 --dport 10000 -j MASQUERADE`
    
  • 존재하다:

    iptables -t nat -A PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 192.168.8.1:80
    

    그리고

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    

참고: eth14G 동글의 인터페이스입니다.인터페이스의 IP는 192.168.8.100이고 동글의 IP는 192.168.8.1입니다.

불행히도 이것은 작동하지 않습니다. IP 전달도 활성화했습니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

타이핑하는 동안

iptables -t nat -L -v -n

존재하다두번째그리고, PREROUTING 행만두번째시도할 때마다 패킷 수가 증가하는 것을 볼 수 있습니다.

이는 작동 방식에 대한 불완전한 이해로 인해 발생할 수 있습니다 netfilter.

당신이 제공할 수 있는 어떤 도움이라도 대단히 감사하겠습니다!

답변1

iptables -t filter -nvL서버 B와 C의 출력을 제공해 주시겠습니까 ?

autossh채널이 서버 C에서 실행되고 있는 것 같습니다 . 맞아? 그렇다면 다른 접근 방식을 제안하겠습니다. B에서는 커널이 권한이 없는 사용자가 포트 80을 여는 것을 허용하지 않기 때문에 REDIRECT 규칙이 필요합니다.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 10000
iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT

(편집하다): 서버 B에서는 다음 GatewayPorts위치에서 활성화되어야 합니다 /etc/ssh/sshd_config.

# /etc/ssh/sshd_config
GatewayPorts clientspecified

서버 C에서 매개변수를 수정하여 연결을 동글로 직접 전달합니다 autossh.

autossh -M 0 -N [email protected] -R 10022:127.0.0.1:22 \
    -R :10000:192.168.8.1:80

귀하의 설정에서 볼 수 있는 유일한 오류는 PREROUTING서버 C의 체인 규칙에 관한 것입니다. 이 경우 네트워크 인터페이스를 통해 들어오는 패킷에만 영향을 주기 때문에 평가되지 않습니다. 생성된 연결은 ssh로컬로 생성되므로 OUTPUT체인의 규칙에 영향을 받습니다.

관련 정보