서버에 방화벽이 있기 때문에 허용된 소스 IP를 사용하여 호스트(Slackware64 linux 14.2, 커널 5.4)에서 모든 연결을 만들어야 합니다.10.2.23.1이 경우.
호스트의 IP 주소:
$ ip a
[...]
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0d:b9:55:c1:c8 brd ff:ff:ff:ff:ff:ff
inet 10.2.22.7/28 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20d:b9ff:fe55:c1c8/64 scope link
valid_lft forever preferred_lft forever
7: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0d:b9:55:c1:c9 brd ff:ff:ff:ff:ff:ff
inet 10.10.16.166/30 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::20d:b9ff:fe55:c1c9/64 scope link
valid_lft forever preferred_lft forever
8: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
link/ether 00:0d:b9:55:c1:ca brd ff:ff:ff:ff:ff:ff
inet 10.2.23.1/24 scope global eth2
valid_lft forever preferred_lft forever
inet 10.247.226.186/32 scope global eth2
valid_lft forever preferred_lft forever
inet6 fe80::20d:b9ff:fe55:c1ca/64 scope link
valid_lft forever preferred_lft forever
[...]
예를 들어 SSH를 사용하여 로컬 IP 10.2.23.1에서 10.0.4.16으로 연결하려고 합니다.
$ ssh -b 10.2.23.1 [email protected]
ssh가 소스 IP로 10.2.23.1 대신 10.247.226.186을 사용하기 때문에 연결이 실패합니다(tcpdump를 통해 확인됨). 이는 서버에서 허용되지 않습니다. 물론 서버에서 다른 IP를 허용할 수도 있지만 알고 싶습니다.왜작동하지 않습니다.
또한 이를 확인하기 위해 간단한 C 프로그램을 작성했습니다(실제로 socket
는 bind
10.2.23.1 및 connect
... 실제로는 어디에서나 가능). 프로그램이 bind
오류 없이 실행되고 작동하지만 소스 IP는 항상 10.247.226.186입니다.
모든 연결이 왜 사용되는지 아는 사람이 있습니까?다른 IPeth2에서요? /32 넷마스크에 문제가 있을 수 있습니까?
감사해요.
편집: 호스트 OS를 추가했습니다.
답변1
AB가 댓글에서 말했듯이 이것은 호스트의 NAT입니다. 이것이 모든 프로그램이 IP에 바인딩할 수 있지만 tcpdump가 다른 IP를 표시하는 이유입니다.