
이것은 나를 혼란스럽게 만들었습니다.
저는 pfSense 방화벽(이라고 부르겠습니다 pfs
)과 그 뒤에 여러 서버가 있습니다. 내 공용 IP에서 LAN의 다른 서버로 여러 서비스를 문제 없이 NAT합니다.
서버 중 하나(라고 부르겠습니다 s1
)에서 저는 VM(이라고 부르겠습니다)을 실행 vagrant
하고 libvirt
있습니다 v1
.공공의DHCP 서버를 192.168.1.159
통해 IP를 가져오는 네트워크가 구성되었습니다 .pfs
이제 의 SSH pfs
에 액세스하기 위해 간단한 NAT를 구성하고 에서 에 액세스합니다 . 괜찮아요.s1
<wan>:6622 -> s1:22
mydomain.com:6622
유효한 SSH 사용자로 액세스 v1:22
(또는 이에 상응하는 것 ) 도 가능합니다.192.168.1.159:22
LAN 내에서문제없이.
이제 에 간단한 NAT를 추가 합니다 pfs
. <wan>:6722 -> v1:22
이제 액세스를 시도 중입니다.mydomain.com:6722
하지 않습니다일하다?!
목표는 "또 다른 계층"을 추가하는 것입니다. 예를 들어 공용 포트가 있는 컨테이너를 실행 --publish 9980:80
하고 예 를 들어 해당 NAT를 사용하여 v1
컨테이너에 액세스합니다 .v1:9980
mydomain.com:9980
pfs
<wan>:9980 -> v1:9980
LAN에서이것도 예상대로 작동하지만(예: v1:9980
LAN에서 액세스할 수 있음) NAT를 통해 작동 pfs
하지 않습니다.
동일한 네트워크 내에서 다른 컴퓨터의 유사한 설정이 문제 없이 작동하고 있습니다. 심지어 내 공용 IP를 통해 NAT를 통해 완벽하게 SSH를 통해 연결할 수 있는 또 다른(비방랑이 아닌 libvirt
) VM 도 있습니다. s1
하지만 위의 내용은 기계에서 작동하지 않으며 vagrant
, 이 문제의 원인이 무엇인지 정말 알 수 없습니다. (FWIW net.ipv4.forward
에서 활성화 했습니다 v1
).
편집하다:
한 단계 더 가까워졌습니다. 를 vagrant
사용하여 VM 의 첫 번째 기존 NIC를 핵으로 설정 virt-manager
하고 두 번째 VM을 rtl8139
대신으로 설정 virtio
한 다음 다시 시작하면 vagrant ssh
기능이 손실되지만 NAT는 작동합니다. 따라서 질문은 다음과 같습니다. vagrant
비슷한 구성을 갖도록 프로비저닝을 통해 구성하는 방법은 공용 네트워크가 기본 인터페이스에 있어야 한다는 의미라고 생각합니다.
답변1
해결책:
원인은 vagrant
로컬 인터페이스(개인 네트워크)를 기본으로 요구하고 이를 재정의할 표준 방법이 없기 때문입니다. (일부정보는여기, 하지만 vagrant
사람들은 주제에 대해 스스로 혼란스럽다는 것을 인정합니다...)
기본 경로를 조정하는 개념의 (보다 강력한) 변형이 솔루션을 가져왔습니다. 저는 ansible
프로비저닝 플레이북을 통해 게스트에서 다음을 실행하는 프로비저닝 도구를 사용하고 있습니다.
- name: remove wrong default route on eth0 (again)
shell: |
eval $(route -n | awk '$0~/[.0]{4}/ && $3~/[.0]{4}/ && $8~/eth0/ { printf "ip route del default via %s dev %s; ",$3,$8 }')
(흥미롭게도 두 번(또는 잠시 후에?) 실행해야 합니다. 아마도 프로비저닝 스크립트가 시작될 때 네트워크가 완전히 작동하지 않았기 때문일까요?)
이렇게 하면 의 기본 경로가 제거되고 eth0
( 은 에서만 public_network
자동으로 구성됨 ) 외부 연결이 예상대로 작동합니다. 이는 들어오는 NAT 요청에 대한 응답이 기본적으로 기본 경로(기본적으로 우선 순위가 있음) 를 통해 방화벽으로 라우팅된다는 사실로 인해 추정됩니다(여기서 추측). 이는 NAT FW가 VM의 . 따라서 외부 요청이 들어온 것과 동일한 인터페이스에서 외부 요청에 대한 기본 응답을 제거합니다.eth1
vagrant
eth0
vagrant
eth1
eth0