- 사용자가 새 IP 주소를 입력하면 해당 대역의 .1 주소를 게이트웨이로 자동 추천 - 예: 192.168.0.13 입력 시 → 192.168.0.1 게이트웨이 추천 - 사용자는 추천된 값을 그대로 사용하거나 다른 값으로 변경 가능 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
188 lines
6.2 KiB
Bash
Executable File
188 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Proxmox IP 변경 스크립트
|
|
# 작성자: Claude
|
|
# 설명: Proxmox 호스트의 IP 주소를 자동으로 변경하는 스크립트
|
|
|
|
# 색상 정의
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 루트 권한 확인
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo -e "${RED}이 스크립트는 루트 권한으로 실행해야 합니다.${NC}"
|
|
echo "사용법: sudo $0"
|
|
exit 1
|
|
fi
|
|
|
|
clear
|
|
echo -e "${BLUE}================================================${NC}"
|
|
echo -e "${BLUE} Proxmox IP 주소 변경 스크립트${NC}"
|
|
echo -e "${BLUE}================================================${NC}"
|
|
echo
|
|
|
|
# 현재 네트워크 정보 표시
|
|
echo -e "${GREEN}[현재 네트워크 정보]${NC}"
|
|
echo -e "${YELLOW}----------------------------------------${NC}"
|
|
|
|
# 활성 네트워크 인터페이스 찾기
|
|
ACTIVE_INTERFACE=$(ip route | grep default | awk '{print $5}' | head -n1)
|
|
if [ -z "$ACTIVE_INTERFACE" ]; then
|
|
echo -e "${RED}활성 네트워크 인터페이스를 찾을 수 없습니다.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 현재 IP 주소 가져오기
|
|
CURRENT_IP=$(ip addr show $ACTIVE_INTERFACE | grep "inet " | awk '{print $2}' | cut -d/ -f1)
|
|
CURRENT_SUBNET=$(ip addr show $ACTIVE_INTERFACE | grep "inet " | awk '{print $2}' | cut -d/ -f2)
|
|
CURRENT_GATEWAY=$(ip route | grep default | awk '{print $3}' | head -n1)
|
|
|
|
echo -e "인터페이스: ${GREEN}$ACTIVE_INTERFACE${NC}"
|
|
echo -e "현재 IP: ${GREEN}$CURRENT_IP/$CURRENT_SUBNET${NC}"
|
|
echo -e "게이트웨이: ${GREEN}$CURRENT_GATEWAY${NC}"
|
|
|
|
# 호스트명 가져오기
|
|
HOSTNAME=$(hostname)
|
|
echo -e "호스트명: ${GREEN}$HOSTNAME${NC}"
|
|
echo
|
|
|
|
# 백업 생성
|
|
echo -e "${YELLOW}[설정 파일 백업 중...]${NC}"
|
|
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
|
|
cp /etc/network/interfaces /etc/network/interfaces.backup.$BACKUP_DATE
|
|
cp /etc/hosts /etc/hosts.backup.$BACKUP_DATE
|
|
echo -e "${GREEN}백업 완료:${NC}"
|
|
echo " - /etc/network/interfaces.backup.$BACKUP_DATE"
|
|
echo " - /etc/hosts.backup.$BACKUP_DATE"
|
|
echo
|
|
|
|
# 새 IP 정보 입력
|
|
echo -e "${BLUE}[새로운 네트워크 정보 입력]${NC}"
|
|
echo -e "${YELLOW}----------------------------------------${NC}"
|
|
|
|
# IP 주소 입력 및 검증
|
|
while true; do
|
|
read -p "새 IP 주소 (예: 192.168.10.120): " NEW_IP
|
|
if [[ $NEW_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
|
# IP 형식 검증
|
|
IFS='.' read -ra ADDR <<< "$NEW_IP"
|
|
valid=true
|
|
for i in "${ADDR[@]}"; do
|
|
if [ $i -gt 255 ]; then
|
|
valid=false
|
|
break
|
|
fi
|
|
done
|
|
if $valid; then
|
|
break
|
|
else
|
|
echo -e "${RED}유효하지 않은 IP 주소입니다. 다시 입력해주세요.${NC}"
|
|
fi
|
|
else
|
|
echo -e "${RED}올바른 IP 주소 형식이 아닙니다. (예: 192.168.10.120)${NC}"
|
|
fi
|
|
done
|
|
|
|
# 서브넷 마스크 입력
|
|
read -p "서브넷 마스크 (기본값: $CURRENT_SUBNET): " NEW_SUBNET
|
|
if [ -z "$NEW_SUBNET" ]; then
|
|
NEW_SUBNET=$CURRENT_SUBNET
|
|
fi
|
|
|
|
# 새 IP 대역에 맞는 게이트웨이 자동 추천
|
|
# IP 주소의 첫 3개 옥텟을 기반으로 .1을 게이트웨이로 추천
|
|
SUGGESTED_GATEWAY="${ADDR[0]}.${ADDR[1]}.${ADDR[2]}.1"
|
|
|
|
# 게이트웨이 입력
|
|
read -p "게이트웨이 (추천: $SUGGESTED_GATEWAY): " NEW_GATEWAY
|
|
if [ -z "$NEW_GATEWAY" ]; then
|
|
NEW_GATEWAY=$SUGGESTED_GATEWAY
|
|
fi
|
|
|
|
echo
|
|
echo -e "${BLUE}[변경 사항 확인]${NC}"
|
|
echo -e "${YELLOW}----------------------------------------${NC}"
|
|
echo -e "현재 IP: $CURRENT_IP/$CURRENT_SUBNET → 새 IP: ${GREEN}$NEW_IP/$NEW_SUBNET${NC}"
|
|
echo -e "게이트웨이: $CURRENT_GATEWAY → ${GREEN}$NEW_GATEWAY${NC}"
|
|
echo
|
|
|
|
read -p "이 설정으로 변경하시겠습니까? (y/n): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
echo -e "${YELLOW}취소되었습니다.${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo
|
|
echo -e "${YELLOW}[설정 파일 수정 중...]${NC}"
|
|
|
|
# /etc/network/interfaces 파일 수정
|
|
echo -e "${BLUE}1. /etc/network/interfaces 수정${NC}"
|
|
sed -i "s|address $CURRENT_IP/$CURRENT_SUBNET|address $NEW_IP/$NEW_SUBNET|g" /etc/network/interfaces
|
|
sed -i "s|gateway $CURRENT_GATEWAY|gateway $NEW_GATEWAY|g" /etc/network/interfaces
|
|
|
|
# /etc/hosts 파일 수정
|
|
echo -e "${BLUE}2. /etc/hosts 수정${NC}"
|
|
sed -i "s|$CURRENT_IP|$NEW_IP|g" /etc/hosts
|
|
|
|
echo -e "${GREEN}설정 파일 수정 완료!${NC}"
|
|
echo
|
|
|
|
# 변경된 내용 확인
|
|
echo -e "${BLUE}[변경된 설정 확인]${NC}"
|
|
echo -e "${YELLOW}----------------------------------------${NC}"
|
|
echo -e "${GREEN}/etc/network/interfaces:${NC}"
|
|
grep -E "address|gateway" /etc/network/interfaces | grep -v "#"
|
|
echo
|
|
echo -e "${GREEN}/etc/hosts:${NC}"
|
|
grep "$NEW_IP" /etc/hosts
|
|
echo
|
|
|
|
# 재부팅 여부 확인
|
|
echo -e "${YELLOW}========================================${NC}"
|
|
echo -e "${YELLOW}IP 변경을 완료하려면 시스템을 재부팅해야 합니다.${NC}"
|
|
echo -e "${YELLOW}========================================${NC}"
|
|
echo
|
|
echo "옵션:"
|
|
echo " 1) 지금 재부팅"
|
|
echo " 2) 네트워크 서비스만 재시작 (연결이 끊길 수 있음)"
|
|
echo " 3) 나중에 수동으로 재부팅"
|
|
echo
|
|
read -p "선택하세요 (1/2/3): " REBOOT_OPTION
|
|
|
|
case $REBOOT_OPTION in
|
|
1)
|
|
echo -e "${RED}5초 후 시스템이 재부팅됩니다...${NC}"
|
|
echo -e "${YELLOW}새 IP 주소: $NEW_IP${NC}"
|
|
for i in {5..1}; do
|
|
echo -e "${RED}$i...${NC}"
|
|
sleep 1
|
|
done
|
|
reboot
|
|
;;
|
|
2)
|
|
echo -e "${YELLOW}네트워크 서비스를 재시작합니다...${NC}"
|
|
echo -e "${RED}주의: SSH 연결이 끊길 수 있습니다!${NC}"
|
|
echo -e "${YELLOW}새 IP 주소로 다시 연결하세요: $NEW_IP${NC}"
|
|
sleep 3
|
|
systemctl restart networking
|
|
;;
|
|
3)
|
|
echo -e "${GREEN}나중에 수동으로 재부팅하세요.${NC}"
|
|
echo -e "${YELLOW}재부팅 명령: sudo reboot${NC}"
|
|
echo -e "${YELLOW}또는 네트워크 재시작: sudo systemctl restart networking${NC}"
|
|
echo
|
|
echo -e "${GREEN}새 IP 주소: $NEW_IP${NC}"
|
|
;;
|
|
*)
|
|
echo -e "${RED}잘못된 선택입니다.${NC}"
|
|
echo -e "${YELLOW}나중에 수동으로 재부팅하세요: sudo reboot${NC}"
|
|
echo -e "${GREEN}새 IP 주소: $NEW_IP${NC}"
|
|
;;
|
|
esac
|
|
|
|
echo
|
|
echo -e "${GREEN}스크립트 실행 완료!${NC}" |