vmbr0 브리지인지 NAT인지는 주소 개수로 가른다
검색에 먼저 나오는 방법은 게스트를 vmbr0에 붙이거나, 호스트에서 NAT를 하는 쪽입니다. 둘 다 게스트는 켜집니다. 이 기기에서는 주소를 먼저 셉니다. 콘솔 문자열은 쉼표, 공백, 세미콜론으로 여러 주소를 담을 수 있습니다. 나누면 첫 주소가 관리 주소이고, SSH는 그것만 씁니다. 뒤의 주소가 게스트에 넘길 추가 주소입니다.
포함된 1개를 호스트 로그인 주소와 게스트의 유일한 공인 주소로 동시에 쓸 수 없습니다. vmbr0에서 빼 게스트로 옮기면 호스트 SSH도 사라집니다. 추가 주소는 게스트 한 대에 하나입니다. 추가가 0이면 게스트는 사설 주소만 갖고, 바깥은 관리 주소의 지정 포트로 들어옵니다. 이것이 NAT입니다. 추가가 있으면, 주문에 없는 프리픽스를 vmbr0에서 나누지 않습니다. 물리 포트가 없는 내부 브리지를 만들고 그 주소를 /32로 넘깁니다.
| 가진 주소 | 게스트가 붙는 곳 | 밖으로 나가는 방식 |
|---|---|---|
| 관리 주소만 | 내부 브리지 vmbr1 | 사설 주소. 호스트가 포트를 넘김 |
| 개수로 산 IPv4 | 같은 vmbr1 | 공인 주소 하나, 마스크 /32 |
| 안내의 /28 또는 /29 | 그렇게 붙이지 않음 | 이 주문에는 그 프리픽스가 없음 |
어느 사이트나 인증서에 주소를 둘지는 다른 노트입니다. 추가 주소를 업무별로 나누기를 봅니다. 이 글은 Proxmox 게스트로 들어가는 경로만 다룹니다.
관리 주소는 호스트에 남긴다
주문에서 Proxmox VE 8 또는 Proxmox VE 9를 고릅니다. 둘 다 시스템 이미지에 있습니다. 인도 뒤에는 관리 주소로 SSH합니다. USB로 다시 설치하지 않고, 설치 프로그램에서 NIC를 다시 고르지도 않습니다.
파일을 고치기 전에 현재를 봅니다. ip -4 addr에서 SSH에 쓴 주소는 vmbr0에 있습니다. ip route show default의 via가 게이트웨이고 dev는 vmbr0입니다. 이 쌍은 이미지가 적어 둔 관리 설정입니다. 프리픽스가 /32가 아닐 수 있습니다. 안내문의 /24나 /28로 바꾸지 않습니다. 물리 NIC 이름은 /etc/network/interfaces의 vmbr0에 있는 bridge-ports가 맞습니다. ip link에 없는 eth0이나 ens3로 바꾸지 않습니다.
추가 주소는 같은 브리지의 별칭으로 이미 보이기도 하고, 인도 메모에만 있기도 합니다. 전역 IPv4 개수는 1에 주문의 추가 개수를 더한 값입니다. 모자라면 거기서 멈추고 티켓으로 맞춥니다. 다른 기기의 주소는 쓰지 않습니다. 개수가 맞으면 게스트로 넘길 주소를 호스트 설정에서 빼고 관리 주소만 남깁니다. 같은 주소를 호스트 별칭과 게스트 NIC에 같이 쓰면, 들어오는 트래픽은 호스트에 먼저 닿고 게스트 서비스는 받지 못합니다.
vmbr0의 주소, 프리픽스, 게이트웨이는 바꾸지 않습니다. 관리 주소가 틀리면 이번 SSH가 끊깁니다. 콘솔의 그래픽 접속은 이 SSH에 기대지 않으므로, 깨진 파일은 거기서 되돌릴 수 있습니다. 아래 단계는 vmbr0의 관리 주소를 고치지 않습니다.서브넷 안내를 따르면 켜지지만 나가지 못한다
일반 안내는 시설이 프리픽스 전체를 vmbr0에 두고, 게이트웨이가 그 첫 주소라고 가정합니다. 게스트는 나머지에서 하나를 고르고 마스크를 호스트와 같게 합니다. 주소가 인터페이스에 실리므로 NIC는 up으로 보입니다. 나갈 때 게스트는 마스크로 게이트웨이가 같은 링크에 있다고 보고 ARP를 보냅니다. 그 프리픽스는 이 기기에 없으므로 ARP는 돌아오지 않고 기본 경로는 쓰이지 않습니다. 바깥에서 보면 게스트는 켜져 있고 포트에는 서비스가 없습니다.
다른 글은 게스트를 vmbr0에 붙이고 추가 IPv4를 넣으며, 게이트웨이는 호스트 것을 복사하고 마스크는 /24나 /28로 둡니다. 추가 주소는 개별로 제공되며 다시 나눌 프리픽스가 아닙니다. 상위 네트워크는 이 주소들을 이 기기로 보냅니다. 게스트 MAC이 게이트웨이를 가져가는 형태가 아닙니다. vmbr0의 ARP는 실제 다음 홉에 닿지 않거나, 응답이 호스트의 옛 별칭에 떨어집니다. 주소는 보입니다. ping은 나가지 않습니다.
또 하나는 호스트가 소스 NAT를 켠 채 게스트가 공인 주소를 가졌다고 보는 겹침입니다. 나가는 패킷은 관리 주소로 바뀌고, 돌아오는 연결은 게스트 세션과 맞지 않습니다. 독립 공인 주소에는 소스 NAT를 걸지 않습니다. 포트 포워딩으로 닿는 게스트에는 공인 주소를 올리지 않습니다. 같은 주소에 둘을 겹치지 않습니다.
추가 주소는 내부 브리지에 /32로 넘긴다
내부 브리지 이름은 vmbr1입니다. 물리 포트는 없고 호스트와 게스트 사이에만 씁니다. /etc/network/interfaces 끝에 덧붙입니다. 사설 대역은 바꿔도 되지만 양쪽은 같아야 합니다. 10.10.10.0/24를 이미 쓰면 다른 사설 대역으로 바꿉니다. 아래 203.0.113.20은 문서용 예입니다. 주문의 추가 주소로 바꾸고, 주소마다 한 줄입니다.
호스트 쪽에는 auto vmbr1, address 10.10.10.1/24, bridge-ports none, bridge-stp off, bridge-fd 0이 있습니다. 추가 주소마다 post-up ip route add 203.0.113.20/32 dev vmbr1을 넣습니다. 아직 없는 게스트 주소로 via하지 않습니다. 경로가 브리지 자체를 가리키면, 그 /32를 가진 게스트가 브리지에서 ARP에 답합니다.
포워딩과 역경로 검사는 /etc/sysctl.d/99-guest-route.conf에 쓰고 sysctl --system을 실행합니다. 줄은 net.ipv4.ip_forward=1, net.ipv4.conf.all.rp_filter=2, 그리고 vmbr0과 vmbr1에도 rp_filter=2입니다. 포워딩이 꺼지면 호스트는 게스트에 닿아도 게스트와 바깥 사이는 통하지 않습니다. 역경로가 엄격 모드이면 커널이 이 패킷을 버립니다. 추가 주소는 게스트에 있고 응답은 vmbr0으로 나가므로, 엄격 검사는 소스가 그 출구에 속하지 않는다고 봅니다. 느슨한 모드는 이 검사만 풉니다. 방화벽을 대신하지 않습니다.
ifreload -a로 인터페이스 파일을 적용합니다. 적용 뒤 기존 SSH에서 명령을 한 번 더 실행해 관리 주소가 vmbr0에 있는지 확인합니다. ip route get 203.0.113.20은 dev vmbr1을 보여야 합니다. 파일에 쓰지 않고 현재 셸에서만 ip route add하면 재부팅 후 경로가 사라지고 게스트는 다시 나가지 못합니다.
Proxmox에서 게스트 NIC 브리지는 vmbr1, 모델은 VirtIO입니다. 이 NIC에 NAT 스위치는 없습니다. 게스트 OS에서는 공인 주소를 /32로 두고, 상대와 기본 게이트웨이를 모두 10.10.10.1로 둡니다. 데비안 계열 interfaces는 address 203.0.113.20/32, pointopoint 10.10.10.1, gateway 10.10.10.1입니다. 우분투 netplan도 주소는 /32, 기본 경로 via는 10.10.10.1, on-link: true를 붙입니다. Proxmox Cloud-Init 칸에 /32와 게이트웨이만 넣으면 이 온링크 경로가 빠지는 일이 많고, 게스트는 링크에 없는 게이트웨이로 ARP합니다. 게스트 자신의 네트워크 파일에 쓰고 게스트를 재부팅한 뒤 ip route를 봅니다.
독립 공인 주소가 필요한 게스트는 추가 주소 하나를 씁니다. 다음 게스트는 다음 추가 주소를 쓰고 역시 vmbr1에 붙이며 /32 경로를 하나 더합니다. 없는 /28에 여러 게스트를 넣지 않습니다. 게스트에서 ip route get 1.1.1.1을 실행하면 src가 그 공인 주소여야 하고 10.10.10.2이면 안 됩니다. 소스가 아직 사설이면 바깥에 보이는 것은 관리 주소이며, 이 단계는 끝나지 않았습니다.
추가 주소가 없으면 포트만 넘긴다
추가 개수가 0이면 게스트에 공인 주소를 넣지 않습니다. vmbr1은 계속 10.10.10.1/24입니다. 게스트는 그 대역의 사설 주소, 예를 들어 10.10.10.2/24를 쓰고 게이트웨이는 10.10.10.1입니다. 게스트에게 독립된 공인 신원은 없습니다. 게스트 서비스로 들어오려면 관리 주소의 포트 하나를 이 사설 주소로 넘깁니다.
규칙은 호스트 vmbr1의 post-up에 써서 재부팅 뒤에도 남깁니다. 들어오는 예: iptables -t nat -A PREROUTING -d 관리주소 -p tcp --dport 443 -j DNAT --to-destination 10.10.10.2:443. 나가는 예: iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o vmbr0 -j MASQUERADE. Proxmox VE 8과 9에서 이 명령은 iptables-nft를 탑니다. 먼저 -C로 확인하고 이미 있으면 -A하지 않습니다. 그렇지 않으면 ifreload마다 같은 규칙이 쌓입니다.
관리 주소의 TCP 22는 넘기지 않습니다. 그것은 호스트 SSH입니다. 사이트, API, 게스트 자신의 원격 데스크톱은 다른 외부 포트를 씁니다. Windows 게스트의 RDP가 필요하면 관리 주소에서 고른 포트를 그 게스트의 3389로 넘기고, 호스트 22는 그대로 둡니다. 게스트 서비스는 사설 주소나 모든 주소에서 듣습니다. 설정되지 않은 공인 주소만 듣고 있으면 포워딩해도 받을 프로세스가 없습니다.
포트 포워딩은 주소를 늘리지 않고 대역도 올리지 않습니다. 250M, 1G, 2G는 별도 항목이며 세 단계 모두 트래픽 상한이 없습니다. 게스트 열 대가 관리 주소로 나가도 바깥에 보이는 소스는 그 하나입니다. 상대 허용 목록이 서비스마다 다른 소스를 요구하면 이전 절로 돌아가 추가 주소를 개수로 삽니다. 포워딩 규칙으로 서브넷을 만들 수 없습니다.
시설 밖에서 세 번 확인한다
관리 주소로 아직 들어간다
사무실이나 집 네트워크에서 첫 주소로 SSH합니다. 세션은 호스트에 닿고 게스트에 닿지 않습니다. 콘솔의 주소 문자열 전체를 SSH에 붙이지 않습니다.
추가 주소는 해당 게스트에 닿는다
쓸 추가 주소마다 실제 서비스에 한 번 접속합니다. 호스트의
ip route get은vmbr1을 가리킵니다. 게스트의ip -4 addr에 그 /32가 보입니다. 호스트에서 자기 주소로curl하면 루프백에 머무는 일이 많아 바깥 경로는 보이지 않습니다.추가가 없으면 포트를 본다
밖에서 넘긴 포트에 접속하면 응답은 게스트에서 옵니다. 호스트 22에 접속하면 응답은 여전히 호스트입니다. 둘 다 통해야 포워딩이 로그인 입구를 바꾸지 않은 것입니다.
재부팅 뒤에도 남는다
호스트를 재부팅합니다. 관리 주소, 내부 브리지, /32 경로 또는 포트 포워딩이 남아 있습니다.
sysctl net.ipv4.ip_forward는 1입니다. 빠졌으면 인터페이스 파일로 돌아갑니다. 이번 세션에서만 명령을 다시 치지 않습니다.
주소와 경로는 맞는데 바깥이 아직 막히면 방화벽을 봅니다. 데이터센터나 노드 방화벽이 켜져 있으면 포워드 체인이 기본 정책으로 버려질 수 있습니다. 가를 때는 그 게스트 NIC의 방화벽만 잠시 끌 수 있습니다. 경로가 통하면 포트별로 허용을 씁니다. 호스트 전체 필터를 오래 비우지 않습니다.
게스트 안의 NIC 이름은 ens18이나 eth0일 수 있습니다. 그 게스트의 ip link를 기준으로 합니다. 이름이 틀리면 주소가 나타나지 않고, 경로 명령도 서브넷이 없다고 말하지 않습니다. 인터페이스가 up인지 본 다음, 기본 경로의 다음 홉이 10.10.10.1인지 봅니다.
개수와 월 임대료는 같이 더한다
추가 IPv4는 개당 월 $2입니다. 주문에 적는 것은 개수이지 프리픽스 길이가 아닙니다. 4개는 월 $8, 20개는 월 $40입니다. 포함된 1개와 합쳐 256개를 넘지 않습니다. 이 주소는 호스트, 디스크, 대역, 시스템과 같은 월 임대료에 더한 뒤 월수를 곱합니다. 분기는 월 임대료의 3배, 반년은 6배, 연은 12배이며 추가 할인은 없습니다. 설치비는 없습니다.
128GB 월 임대료는 $455이며 IPv4 1개와 250M이 포함됩니다. 256GB는 월 $612이고 주소 규칙은 같습니다. 둘 다 AMD EPYC 7543P, 32코어 64스레드, 메모리는 DDR4-3200 ECC RDIMM입니다. 256GB는 그 등급을 고르는 것이며 128GB 기기에 메모리를 더하는 것이 아닙니다. 메모리 등급은 주소를 늘리지 않습니다. 대역을 1G로 올리면 월 $248이 더해지고 주소 개수는 그대로입니다.
기기는 일본 도쿄에 둡니다. 호스트 로그인은 SSH이고 관리 주소는 콘솔에 있습니다. Windows를 고른 게스트는 RDP를 씁니다. 그것은 게스트 자신의 접속이며 호스트 관리 주소를 바꾸지 않습니다. Proxmox VE 8과 9는 무료 시스템 목록에 있고 이미지로 제공됩니다. 별도의 설치 매체로 만들지 않습니다.