InfraPlatform

Hyper-V Host → Rocky Linux 10 SSH 접속 구성

IT오이시이 2026. 4. 2. 19:05
728x90

 

 

 

Hyper-V 구성으로

Host  Win 11 (Host)    HyperVM -Net  : IP : 10.10.10.1,  gw:10.10.10.1
Vm  Rocky Linux 10: ehh0 : IP : 10.10.10.2,  gw:10.10.10.1

로 설정하고  Host에서 SSH 2222 으로  10.10.10.2 에 접속 하고 자 한다.

Hyper-V Host → Rocky Linux 10 SSH 접속 구성아래 단계별로 설정합니다.


1. Hyper-V 가상 스위치 생성 (Windows Host)

Hyper-V 관리자 → 가상 스위치 관리자 → 내부(Internal) 스위치 생성, 이름 HyperVM-Net.

또는 PowerShell (관리자):

# 새로운 네트워크를 생성한다.
New-VMSwitch -Name "HyperVM-Net" -SwitchType Internal

# 네트워크 I/F 생성 결과를 확인한다
Get-NetAdapter

 


2. Host vNIC IP 설정 (Windows Host)

PowerShell (관리자):

# "vEthernet (HyperVM-Net)" 어댑터에 IP 설정
$iface = Get-NetAdapter | Where-Object { $_.Name -like "*HyperVM-Net*" }
New-NetIPAddress -InterfaceIndex $iface.ifIndex -IPAddress 10.10.10.1 -PrefixLength 24

 

또는 제어판 → 네트워크 → vEthernet (HyperVM-Net) → IPv4 수동 설정:

  • IP: 10.10.10.1
  • 서브넷: 255.255.255.0
  • GW: 비워두거나 10.10.10.1

 


1.1 IP 할당 및 NAT 구성  결과

 

PS C:\Windows\system32>  New-VMSwitch -Name "HyperVM-Net1" -SwitchType Internal

Name        SwitchType NetAdapterInterfaceDescription
----        ---------- ------------------------------
HyperVM-Net Internal 



PS C:\Windows\system32>  Get-NetAdapter 

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
이더넷 4                     VirtualBox Host-Only Ethernet Adapter        30 Up           0A-00-27-00-00-1E         1 Gbps
Wi-Fi                     Intel(R) Wi-Fi 6E AX211 160MHz                5 Not Present  9A-69-C2-24-75-AA          0 bps
vEthernet (HyperVM-Net1)   Hyper-V Virtual Ethernet Adapter #2          14 Up           00-15-5D-38-01-08        10 Gbps
이더넷 2                     Realtek USB GbE Family Controller             4 Up           00-E0-4C-68-04-12       100 Mbps

PS C:\Windows\system32> $iface = Get-NetAdapter | Where-Object { $_.Name -like "*HyperVM-Net*" }
New-NetIPAddress -InterfaceIndex $iface.ifIndex -IPAddress 10.10.10.1 -PrefixLength 24

# 다음과 같이 I/F index를 명시도 가능하다.
PS C:\Windows\system32> New-NetIPAddress -InterfaceIndex 14 -IPAddress 10.10.10.1 -PrefixLength 24



IPAddress         : 10.10.10.1
InterfaceIndex    : 14
InterfaceAlias    : vEthernet (HyperVM-Net1)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : 
PreferredLifetime : 
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 10.10.10.1
InterfaceIndex    : 14
InterfaceAlias    : vEthernet (HyperVM-Net)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Invalid
ValidLifetime     : 
PreferredLifetime : 
SkipAsSource      : False
PolicyStore       : PersistentStore

 

PS C:\Windows\system32> New-NetNat -Name "RockyNAT" -InternalIPInterfaceAddressPrefix "10.10.10.0/24"


Name                             : RockyNAT
ExternalIPInterfaceAddressPrefix : 
InternalIPInterfaceAddressPrefix : 10.10.10.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True

 

1.2 포트 포워딩 설정 (Host 2222 -> VM 22)

Add-NetNatStaticMapping -NatName "RockyNAT" -Protocol TCP `
    -ExternalIPAddress 0.0.0.0 -ExternalPort 2222 `
    -InternalIPAddress 10.10.10.2 -InternalPort 22

 

(Host 2222 -> VM 2222) 으로 접속하려면 아래와 같이 설정한다. (기존 룰 삭제후 재등록)

# 1. 기존에 등록된 2222번 포트 매핑이 있는지 확인하고 삭제합니다.
$existingMapping = Get-NetNatStaticMapping -NatName "RockyNAT" | Where-Object { $_.ExternalPort -eq 2222 }

if ($existingMapping) {
    Write-Host "기존 매핑(Port 2222)을 삭제합니다..." -ForegroundColor Yellow
    Remove-NetNatStaticMapping -StaticMappingID $existingMapping.StaticMappingID -Confirm:$false
}

# 2. 새로운 매핑 등록 (Host:2222 -> VM:2222)
Write-Host "새로운 매핑(Host:2222 -> VM:2222)을 등록합니다." -ForegroundColor Green
Add-NetNatStaticMapping -NatName "RockyNAT" -Protocol TCP `
    -ExternalIPAddress 0.0.0.0 -ExternalPort 2222 `
    -InternalIPAddress 10.10.10.2 -InternalPort 2222

 

PS C:\Windows\system32> Add-NetNatStaticMapping -NatName "RockyNAT" -Protocol TCP `
    -ExternalIPAddress 0.0.0.0 -ExternalPort 2222 `
    -InternalIPAddress 10.10.10.2 -InternalPort 22


StaticMappingID               : 0
NatName                       : RockyNAT
Protocol                      : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress             : 0.0.0.0
ExternalPort                  : 2222
InternalIPAddress             : 10.10.10.2
InternalPort                  : 22
InternalRoutingDomainId       : {00000000-0000-0000-0000-000000000000}
Active                        : True

 

 

 

 

 

3. Rocky Linux 10 VM — 네트워크 설정

VM에 HyperVM-Net 스위치를 연결한 후 부팅.

# NetworkManager로 eth0 설정
nmcli con mod eth0 \
  ipv4.method manual \
  ipv4.addresses 10.10.10.2/24 \
  ipv4.gateway 10.10.10.1 \
  ipv4.dns 8.8.8.8 \
  connection.autoconnect yes

nmcli con up eth0

확인:

ip addr show eth0
ip route

 


4. Rocky Linux — SSH 포트 2222 설정

# /etc/ssh/sshd_config
sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
# 또는 직접 편집: Port 2222 추가 (22도 남길 경우 두 줄 병기)

sudo systemctl restart sshd

SELinux에 포트 2222 허용:

sudo semanage port -a -t ssh_port_t -p tcp 2222

firewalld 허용:

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

# 적용된 룰을 확인합니다.
sudo  firewall-cmd --list-all

# ports: 2222/tcp 가 확인되면 Ok 입니다.

 

 


5. Windows Host — 방화벽 규칙 (필요시)

Host에서 아웃바운드로 막혀있다면 (대부분 불필요, 참고용):

New-NetFirewallRule -DisplayName "SSH to VM 2222" `
  -Direction Outbound -Protocol TCP -RemotePort 2222 -Action Allow

ㅁ host에서 방화벽 설정

PS C:\Windows\system32> New-NetFirewallRule -DisplayName "SSH to VM 2222" `
  -Direction Outbound -Protocol TCP -RemotePort 2222 -Action Allow


Name                          : {bc1945c6-e6cf-4b79-b6f7-2c3a9313a274}
DisplayName                   : SSH to VM 2222
Description                   : 
DisplayGroup                  : 
Group                         : 
Enabled                       : True
Profile                       : Any
Platform                      : {}
Direction                     : Outbound
Action                        : Allow
EdgeTraversalPolicy           : Block
LooseSourceMapping            : False
LocalOnlyMapping              : False
Owner                         : 
PrimaryStatus                 : OK
Status                        : 저장소에서 규칙을 구문 분석했습니다. (65536)
EnforcementStatus             : NotApplicable
PolicyStoreSource             : PersistentStore
PolicyStoreSourceType         : Local
RemoteDynamicKeywordAddresses : {}

 

 


6. SSH 접속 테스트

# PowerShell 또는 Windows Terminal
ssh -p 2222 username@10.10.10.2

# 또는
ssh username@10.10.10.2 -p 2222

트러블슈팅 체크리스트

증상 확인 사항

Connection refused sshd 실행 여부 systemctl status sshd, 포트 확인 ss -tlnp | grep 2222
No route to host VM IP/GW 설정, Host vNIC IP 확인
ping 실패 firewalld ICMP 허용 여부, Hyper-V 스위치 타입 Internal 확인
SELinux 거부 sudo ausearch -m avc -ts recent 로 확인 후 semanage 재적용

 

 

 

7. Linux에서 IP는 있는데 ping이 안 될 때 — firewalld 확인

 
ㅁ 방화벽을 중지하고 Ping를 보내면 작동이되면 방화벽 문제 입니다.
 
bash
# ICMP 허용 여부 확인
sudo firewall-cmd --list-all

# ICMP 허용
sudo firewall-cmd --permanent --add-icmp-block-inversion
sudo firewall-cmd --permanent --remove-icmp-block rich-rule='...'

# 가장 빠른 확인: 방화벽 임시 중지 후 ping 재시도
sudo systemctl stop firewalld
ping -c 3 10.10.10.1

firewall을 중지하고  ping 되면 firewalld 규칙 문제입니다:

 
 
bash
sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" accept'
sudo firewall-cmd --reload
sudo systemctl start firewalld


# 방화벽 정책을 확인합니다.
firewall-cmd --list-all

 

 

 

728x90
반응형