외부에서 HTTP 포트에 액세스하려면 서버의 VPN을 우회하세요.

외부에서 HTTP 포트에 액세스하려면 서버의 VPN을 우회하세요.

저는 FreeBSD 12.1과 openvpn을 사용하여 홈 서버를 운영하고 있습니다. openvpn은 서버에서만 실행됩니다. 나머지 홈 네트워크는 openvpn이 아닙니다.

저는 웹 서버의 초보자이고 lighttpd를 통해 이리저리 살펴보며 해당 용량의 서버를 사용하고 있습니다. 포트 8080에 대한 웹 서버를 설정하고(내 ISP는 80을 꺼둡니다) 들어오는 포트 8080을 서버 8080으로 전달하도록 DD-WRT 라우터를 설정했습니다.

내가 원하는 것은 내 서버가 VPN 서버와 비 VPN 네트워크 서버의 이중 역할을 수행하는 것입니다.

그러나 내가 원하는 목표인 라우터의 외부 IP(":8080" 추가)를 통해 웹 서버에 액세스하는 것은 openvpn을 중지한 경우에만 작동합니다. VPN IP(":8080" 추가)를 사용하면 오븐vpn을 사용하여 웹 서버에 액세스할 수 있지만, 서버나 openvpn을 다시 시작할 때 IP가 항상 변경되므로 이는 실용적이지 않습니다.

내 rc.conf에는 다음이 있습니다.

firewall_enable=yes
firewall_nat_enable=yes
gateway_enable=yes

(마지막 두 개가 필요한지 확실하지 않습니다)

내 ipfw 규칙은 매우 기본적입니다. openvpn이 중지되면 기본적으로 토렌트 및 NZB 트래픽에 대한 "킬 스위치"가 되도록 설정했습니다.

00001 allow ip from any to any via lo0
00010 allow ip from any to any via tun0
00101 allow ip from me to 192.168.1.0/24 uid transmission
00102 allow ip from 192.168.1.0/24 to me uid transmission
00103 deny ip from any to any uid transmission
00104 allow ip from me to 192.168.1.0/24 uid sabnzbd
00105 allow ip from 192.168.1.0/24 to me uid sabnzbd
00106 deny ip from any to any uid sabnzbd

이것은 내 ifconfig입니다.

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=81049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER>
        ether xx:xx:xx:xx:xx:xx
        inet 192.168.1.250 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet6 fe80::xxxx:xxxx:xxxx:xxxx%tun0 prefixlen 64 scopeid 0x3
        inet xx.xxx.xx.xx --> xx.xxx.xx.xx netmask 0xffffffe0
        groups: tun
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 4074

이를 수행할 수 있는 방법이 있습니까? 아니면 별도의 웹 서버를 보유해야 합니까?


나는 팔로우한다클라우스 안데르센의 지시사항단계별로 진행되지만 궁극적으로는 성공하지 못합니다.

방화벽과 VPN을 중지하세요.좋아요
포트 8080의 localhost에서 웹 서버에 연결할 수 있는지 확인하세요.성공적인
그런 다음 동일한 서브넷의 다른 시스템에서.성공적인
마지막으로 인터넷에서.성공적인  (승인됨https://validator.w3.org/)

IP를 네트워크 서버에 바인딩하는 방법은 무엇입니까?
로컬 주소(192.168.1.250:8080)를 통해 내부적으로 액세스하거나 라우터의 공용 주소(64.67.136.70:8080)를 통해 외부 및 내부적으로 액세스할 수 있습니다.

다음 단계는 방화벽을 활성화하는 것입니다.
원래 게시물의 설정을 사용하여 방화벽을 활성화했습니다. 모든 연결은 여전히 ​​양호합니다.

마지막으로 VPN을 활성화합니다.
원래 방화벽 설정을 사용하여 활성화했으며 외부 공용 주소(여전히 내부에서 연결할 수 있음)를 제외하고 모든 연결이 정상입니다. 이제 VPN 주소(178.73.218.69:8080)를 통해 외부로 연결할 수도 있습니다.

그런 다음 제안한 방화벽 규칙을 추가했습니다.("00100 em0을 통해 임의의 8080에서 tcp를 허용합니다") 방화벽을 다시 시작합니다. 연결에는 변화가 없습니다.

수정하지 않은 내 ifconfig는 다음과 같습니다.

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=81049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER>
        ether 34:17:eb:d1:30:df
        inet 192.168.1.250 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet6 fe80::3617:ebff:fed1:30df%tun0 prefixlen 64 scopeid 0x3
        inet 178.73.218.69 --> 178.73.218.65 netmask 0xffffffe0
        groups: tun
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 4056

VPN과 최신 방화벽을 사용한 "netstat -4rn"의 출력은 다음과 같습니다.

Destination        Gateway            Flags     Netif Expire
0.0.0.0/1          178.73.218.65      UGS        tun0
default            192.168.1.1        UGS         em0
127.0.0.1          link#2             UH          lo0
128.0.0.0/1        178.73.218.65      UGS        tun0
178.73.195.104/32  192.168.1.1        UGS         em0
178.73.218.64/27   178.73.218.65      UGS        tun0
178.73.218.65      link#3             UH         tun0
178.73.218.69      link#3             UHS         lo0
192.168.1.0/24     link#1             U           em0
192.168.1.250      link#1             UHS         lo0

추가 조언을 주시면 감사하겠습니다.

답변1

예 - 작동할 수 있습니다. 하지만 완전히 답변할 만큼 충분한 정보를 제공하지 않으셨고, 일부 내용을 수정해 주셨는데, 이것도 도움이 될 것 같습니다.

너무 길어요.단순화 및 검증

"복잡한" 네트워크 설정이 있습니다. 즉, 공용 네트워크 세그먼트가 있지만 em0VPN 네트워크 세그먼트가 켜져 있습니다 tun0. 이들 모두는 정상이지만 이들 사이를 라우팅하는 방법을 이해해야 합니다. 어쩌면 트래픽이 em0계속해서 라우팅될 수도 있습니다 tun0. 그러면 인터넷의 http 클라이언트 트래픽이 서버로 전달될 수 있습니다. 그러나 서버가 tun0모든 반환 트래픽을 http 클라이언트를 통해 라우팅하는 경우 어떠한 응답도 받지 못합니다.

이를 확인하려면 라우팅 테이블을 보고 이해해야 합니다. 확인하다 netstat -4rn.

하지만 귀하가 제공한 정보 중 일부에서도 ipfw 설정을 살펴봐야 할 것 같습니다. 귀하가 표시하는 일련의 규칙은 다음과 같이 요약됩니다.

Rule 1:       Allow everything on lo0
Rule 10:      Allow everything on tun0
Rule 101-103: Transmission related
Rule 104-106: sabnzbd related

내 질문은: DD-WRT 라우터가 포트 8080에서 포트 8080의 서버로 패킷을 전달하는 경우 패킷에 어떤 일이 일어날 것으로 예상합니까?

방화벽에는 이 상황을 처리할 수 있는 규칙이 없습니다. 그런 다음 방화벽이 해당 패킷을 삭제하기를 원합니다. 제가 pf직접 사용하기 때문에 사용법을 100% 확신할 수는 없지만 ipfw다음과 같습니다.

00100 allow tcp from any to any 8080 in via em0

이것이 효과가 있으면 any to any으로 축소될 수 있으며, 이를 기반으로 진행하도록 any to me선택할 수 있습니다 .uid

하지만 openvpn이 실행되지 않을 때 작동한다고 말씀하셨어요. 포트 8080에 대한 트래픽을 허용하는 별도의 규칙이 없기 때문에 방화벽이 잘못 구성되어 모든 트래픽을 허용한다고 예상할 수 있습니다.

하지만 그렇습니다. 이러한 설정은 작동할 수 있습니다. 다만, 움직이는 부분이 많습니다. 나는 이것을 이렇게 디버깅 할 것이다.

  1. 방화벽과 VPN을 중지하세요. 포트 8080의 localhost에서 웹 서버에 연결할 수 있는지 확인하세요. 그런 다음 동일한 서브넷에 있는 다른 컴퓨터에서 웹 서버에 연결합니다. 마지막으로 인터넷에서. 이는 웹 서버가 올바르게 구성되고 작동하는지 확인하는 첫 번째 단계입니다. VPN을 통해 테스트했으므로 구성이 작동할 가능성이 높습니다. 그러면 네트워크 서버는 어떻게 IP를 바인딩합니까? "*", "localhost", 로컬 주소 또는 공개 주소를 사용합니다.

  2. 다음 단계는 방화벽을 활성화하는 것입니다. 방화벽을 활성화한 후 규칙이 예상대로 작동하는지 확인할 수 있습니다. 내 생각엔 당신 사건의 문제는 여기에 있는 것 같아요.

  3. 마지막으로 VPN을 활성화합니다. 이로 인해 흥미로운 라우팅 문제가 발생할 수 있습니다. 웹 서버에 연결할 수 없으면 라우팅을 확인해야 합니다. 이것이 우리가 집중하기 시작하는 곳입니다 netstart -4rn.

따라서 가능한 한 적은 수의 움직이는 부품을 사용하여 각 단계를 완전히 테스트한 다음 한 번에 한 단계씩 앞으로 나아가십시오.

관련 정보