bind: cannot assign requested address 에러는 프로그램이 특정 IP 주소나 포트에 바인딩하려 할 때 발생하는 문제로, IP 주소가 잘못 설정되었거나 포트가 이미 다른 프로세스에 의해 사용 중일 때 발생합니다.
이 에러는 제가 ESP 시스템이랑 MTA 서버를 설치하고 바로 난 에러가 아니라 서버를 재시작하고 난 에러였습니다. 이 설명은 문제 ip주소는 세컨드 아이피, 서버는 리눅스 우분투 서버라는 전제하에 설명하겠습니다.
이 글에서는 이 오류를 해결하는 방법을 단계별로 설명하겠습니다.
에러 원인
bind: cannot assign requested address 에러의 주된 원인은 다음과 같습니다.

- 잘못된 IP 설정: 프로그램이 지정한 IP 주소가 서버의 네트워크 인터페이스에 설정되지 않았거나, 네트워크 인터페이스가 비활성화된 경우.
- 포트 중복 사용: 특정 포트가 이미 다른 프로세스에 의해 사용 중이거나 예약된 포트일 때.
- 권한 문제: 낮은 번호(1024 이하)의 포트에 바인딩하려 할 때 일반 사용자 권한으로 실행하면 발생할 수 있습니다.
제 경우에는 저는 포트 중복 사용이나 권한 문제가 아니라 잘못된 IP 설정이 원인이었으며, 이를 해결하는 방법을 첫번째로 다룹니다. 포트 중복 사용과 권한 문제는 그 밑에 있습니다.
1. 잘못된 IP 설정
1-1. 내 IP가 네트워크에 있는지 확인
ip addr show
IP 주소가 설정되어 있다면, eth0 또는 해당 네트워크 인터페이스 아래에 나옵니다.
있다면 보통 맨 위나 2~3번째 라인에서 ip를 확인 하실 수 있습니다. IP 주소가 보이지 않는다면, 네트워크 인터페이스에 설정되지 않은 것입니다.
1-2. Ping을 써서 테스트 해보기
ping xxx.xxx.x.xxx (연결안되는 IP주소 입력)
이미 연결되어있으면 내가 연결하고자 하는 ip주소가 연결되고 있는 모습을 보실 겁니다.
하지만 Destination Host Unreachable라는 글들이 나온다면
아직 ip가 네트워크 인터페이스에 설정되지 않았을 수 도 있습니다.
1-3. IP 주소 수정
ip addr add 192.168.1.100/24 dev eth0
위의 예시는 여기서 192.168.1.100은 추가하려는 IP 주소, eth0는 네트워크 인터페이스 이름입니다. 환경에 맞게 수정하세요. 수동으로 추가한 IP 주소는 서버 재부팅 시 사라질 수 있습니다.
1-4. 네트워크 설정 영구화
수동으로 추가한 IP 주소는 서버 재부팅 시 사라질 수 있습니다. /etc/network/interfaces
파일 또는 /etc/netplan/
의 설정 파일에 IP를 추가하여 영구적으로 설정합니다.
파일을 편집하기 전에 백업을 꼭 하세요.
cp /etc/network/interfaces /etc/network/interfaces.bak
귀찮으시면 적어도 스크린샷이라도 찍어두세요.
저는 /etc/network/interfaces
에 설정하는 것을 기준으로 하겠습니다.
이건 진짜 서버를 세팅한 회사마다 다르기 때문에 첫번째에 세팅 되어있는 코드를 싹다 복사하여 ChatGPT에게 내가 추가하고 싶은 ip주소를 적어주고 만들어 달라는게 최고입니다. 새로운 IP세팅을 첫번째 세팅 밑에 넣어줍니다.
간단한 예시로는
#first IP
~~~
~~~
# Added secondary IP
iface eth0 inet static
address xxx.xxx.xxx.xxxIP주소
netmask 255.255.255.0
새로운 iface eth0 inet static
블록을 추가하여 보조 IP xxx.xxx.xxx.xxx
를 설정합니다. 보조 IP는 eth0
인터페이스에 추가적으로 설정되어, 두 개의 IP가 모두 활성화됩니다.
netplan 설정 (예시):
/etc/netplan/01-netcfg.yaml
파일을 수정:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.1/24
- 192.168.1.100/24
1-5. 네트워크 설정 적용
systemctl restart networking
netplan을 이용하신다면
netplan apply
파일을 수정한 후 설정을 적용하려면 네트워크 서비스를 재시작합니다.
설정이 올바르게 적용되었는지 확인하려면 다음 명령어를 사용하여 IP 주소가 올바르게 할당되었는지 확인합니다:
ip addr show eth0
위의 단계들을 통해 bind: cannot assign requested address
오류를 해결할 수 있습니다. 저 같은 경우는 수동으로 ip주소를 세팅하고 영구적 세팅을 안했기 때문에 일어난 오류인 것 같습니다. 저같은 피해를 없애기 위해 다른 분들을 미리 세팅해주세요. 혹시 다른문제가 있으신분은 댓글 남겨 주시면 조사해보고 아는 만큼 답변 드리겠습니다.
2. 포트 중복 사용 문제 해결 방법
bind: cannot assign requested address 오류는 특정 포트가 이미 다른 프로세스에 의해 사용 중일 때도 발생할 수 있습니다.
즉, 프로그램이 사용하려는 포트가 이미 다른 서비스에 의해 점유되어 있으면 바인딩할 수 없고, 해당 오류가 뜨게 됩니다.
2-1 현재 사용 중인 포트 확인하기
어떤 프로세스가 특정 포트를 사용하고 있는지 확인하려면 다음 명령어를 사용하세요.
netstat -tulnp | grep <포트번호>
또는 최신 버전의 리눅스에서는 ss
명령어를 사용할 수도 있습니다.
ss -tulnp | grep <포트번호>
🔍 설명:
netstat -tulnp
→ 현재 열려 있는 모든 포트와 프로세스를 표시합니다.
-t
: TCP 포트 표시-u
: UDP 포트 표시-l
: 현재 LISTEN 상태인 포트 표시-n
: 포트 번호를 숫자로 표시 (DNS 조회 방지)-p
: 해당 포트를 사용 중인 프로세스(PID) 표시grep <포트번호>
→ 특정 포트만 필터링해서 확인
만약 포트 8080을 확인하려면:
netstat -tulnp | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1234/apache2
위와 같은 결과가 나오면 PID 1234의 프로세스(Apache 서버)가 8080 포트를 사용 중이라는 의미입니다.
2-a 특정 포트 점유 프로세스 종료
포트를 사용 중인 프로세스를 종료하면 문제가 해결될 수 있습니다. ! 다른 방법 다해보고 안되면 해보시길 바랍니다.
kill -9 <PID>
kill -9 <PID>
→ 해당 프로세스를 강제로 종료
-9
: 즉시 종료 (SIGKILL)
만약 PID 1234의 프로세스를 종료하려면:
kill -9 1234
🔹 이후 다시 실행해 포트가 해제되었는지 확인하세요.
netstat -tulnp | grep <포트번호>
2-b 사용 가능한 다른 포트로 변경
만약 특정 포트가 이미 다른 서비스에 의해 사용 중이라면, 설정 파일에서 포트 번호를 변경하는 것도 해결 방법이 될 수 있습니다.
예를 들어, 웹 서버 설정에서:
- 기존 설정:
Listen 8080
- 변경 후 설정:
Listen 9090
변경 후 서비스를 다시 시작하세요.
systemctl restart <서비스명>
systemctl restart <서비스명>
→ 특정 서비스를 다시 시작- 예제:
systemctl restart apache2
(Apache 웹 서버 재시작)
3. 권한 문제 해결 방법 (1024 이하 포트 바인딩)
리눅스에서는 **1024 이하의 포트(Well-Known Ports)**를 root 사용자만 바인딩할 수 있습니다.
즉, 일반 사용자가 80, 443, 22, 25 등의 포트에 직접 바인딩하려 하면 권한 부족 오류가 발생합니다.
3-1 root 계정이 필요한 경우 확인
포트를 1024 이하에서 사용하려 한다면, 일반 사용자 권한으로 실행할 수 없습니다.
이 경우, whoami
명령어로 현재 사용자가 root인지 확인하세요.
whoami
whoami
→ 현재 로그인한 사용자 계정을 출력
출력이 root
가 아니면 권한 문제로 인해 바인딩이 실패할 가능성이 높습니다.
3-2 CAP_NET_BIND_SERVICE 권한 부여 (권한을 영구적으로 변경)
특정 프로그램이 root 권한 없이도 1024 이하의 포트에 바인딩할 수 있도록 하려면 CAP_NET_BIND_SERVICE
권한을 부여하면 됩니다.
setcap 'cap_net_bind_service=+ep' /경로/프로그램
setcap 'cap_net_bind_service=+ep' <프로그램>
→ 특정 프로그램이 1024 이하 포트를 root 없이 바인딩 가능하게 변경<프로그램>
은 실행 파일의 경로를 입력해야 합니다.
Nginx 같은 웹 서버가 80
포트에서 실행되도록 설정하려면:
setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
이제 nginx를 root 권한 없이 실행해도 80 포트에 바인딩할 수 있습니다.
📌 정리
✅ 잘못된 IP 설정 해결 방법
ip addr show
로 현재 네트워크 인터페이스에 IP가 설정되어 있는지 확인ping <IP주소>
로 연결 여부 테스트ip addr add <IP주소>/24 dev eth0
로 임시 추가/etc/network/interfaces
또는/etc/netplan/01-netcfg.yaml
을 수정하여 IP를 영구적으로 설정systemctl restart networking
또는netplan apply
로 변경 사항 적용
✅ 포트 중복 사용 문제 해결 방법
netstat -tulnp | grep <포트번호>
로 사용 중인 포트 확인kill -9 <PID>
로 점유 프로세스 종료- 설정 파일에서 포트 변경 후 서비스 재시작 (
systemctl restart <서비스명>
)
✅ 권한 문제 해결 방법 (1024 이하 포트 바인딩)
whoami
명령어로 현재 사용자가 root인지 확인setcap 'cap_net_bind_service=+ep' /경로/프로그램
을 사용하여 특정 프로그램에 1024 이하 포트 바인딩 권한 부여