
라우터가 없어서 CentOS 6.4 Linux 시스템을 라우터로 만들어 공용 네트워크 트래픽을 로컬 LAN으로 전달했습니다. 여기에는 두 개의 NIC 카드가 있는데, 하나는 공용 IP 주소(eth1)용이고 다른 하나는 개인 IP 주소(eth2)용입니다.
내 로컬 LAN에 서버가 연결되어 있다고 가정해 보겠습니다 192.168.1.2
.
라우터
- eth1:
x.x.x.x
, 공용 IP 주소 - eth2:
192.168.1.1
, 내부 라우터 주소
외부 네트워크의 누군가가 공용 IP에서 SSH를 실행하면 서버로 리디렉션되어야 합니다.
ssh x.x.x.x
또는 사용퍼티
서버에서 SELinux 및 iptables 방화벽을 비활성화했습니다. Linux 시스템 라우터에서 일부 iptables 수정을 시도했지만 SSH 요청이 여전히 리디렉션되지 않습니다.
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.1 --dport 22 -j DNAT --to-destination 192.168.1.2:22
또한 동일한 Linux 시스템 라우터의 iptables를 사용하여 모든 HTTP(80) 트래픽을 내부 서버로 전달하려고 합니다.
답변1
먼저 커널에서 패킷 전달이 활성화되어 있는지 확인하십시오.
# echo 1 > /proc/sys/net/ipv4/ip_forward
아래 줄을 추가하여 영구적으로 만들 수도 있습니다./etc/sysctl.conf
net.ipv4.ip_forward = 1
라우터 역할을 하는 Linux 머신에서 이 작업을 수행해야 합니다. 라우터 시스템에서 다음 규칙을 시도해 볼 수 있습니다.
iptables -t nat -A PREROUTING -i eth1 -d x.x.x.x -p tcp --dport 22 -j DNAT --to-destination 192.168.1.2:22
또한 라우터 상자에서 NAT 규칙의 출력을 알려주십시오.
iptables -t nat -L -n -v
답변2
이 놀라운 사실을 바탕으로디지털오션포트 전달 방법에 대한 의 튜토리얼을 여기에 다시 작성하기로 결정했습니다.
나는 이것이 어떻게 작동하는지 연구하는 데 많은 시간을 보냈습니다. 저는 Linux를 처음 접했고 시작이 항상 쉬운 것은 아닙니다. 다음은 내 서버의 예이며 포트 전달입니다.
방화벽 서버(NIC 카드 2개) - 네트워크 세부정보:
- 공용 IP 주소:xx.xx.xx.xx
- 개인 IP 주소:yy.yy.yy.yy
- 공개 인터페이스:eth0
- 개인 인터페이스:eth1
내부(예: SSH, 웹) 서버(NIC 카드 1개) - 네트워크 세부정보:
- 개인 IP 주소:zz.zz.zz.zz
- 개인 인터페이스:eth0
해결책:
커널에서 패킷 전달을 활성화합니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
변수를 정의합니다.
# Admin IP address (e.g. public home ip)
ADMIN="aa.aa.aa.aa"
# IP addresses of servers (e.g. in cloud):
FW_eth0_ip="xx.xx.xx.xx"
FW_eth1_ip="yy.yy.yy.yy"
WEB_eth0_ip="zz.zz.zz.zz"
# Services:
SSH="22"
HTTP="80"
Iptables 포트 전달(-m conntrack 사용):
iptables -t nat -A PREROUTING -i eth0 -s $ADMIN -d $FW_eth0_ip -p tcp --dport $SSH -j DNAT --to-destination $WEB_eth0_ip
iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport $SSH -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport $SSH -d $WEB_eth0_ip -j SNAT --to-source $FW_eth1_ip
몇 가지 참고사항:
- "..-s $ADMIN -d $FW_eth0_ip.."(첫 번째 행) - 보안상의 이유로만 추가되었습니다. 이는 ADMIN IP만 SSH에 액세스할 수 있음을 의미합니다(필요하지 않은 경우 삭제할 수 있음).
- -m conntrack와 같다-m 상태
- SSH의 기본 포트를 1xxxx(/etc/ssh/sshd_config)와 같은 다른 포트로 변경하는 것이 좋습니다.
- 확인하다TCP 및 UDP 포트 번호 목록
- 방화벽 서버의 SSH에 액세스하는 데 포트 15xx1을 사용하고 내부 포트 15xxx2를 사용합니다.
단말기:
# access firewall server
$ ssh [email protected] -p 15xx1
# access internal server
$ ssh [email protected] -p 15xx2
사용된 규칙에 대한 자세한 내용은 언급된 튜토리얼에 완벽하게 설명되어 있습니다.
그게 다 제가 쓴 것입니다. 그것이 당신에게 도움이 되기를 바랍니다.
답변3
iptables에 대한 질문이지만 FirewallD도 실행 중인 경우 내부 네트워크의 HTTP에 액세스하는 방법은 다음과 같습니다.
먼저 내부 서버 FirewallD에서 http 트래픽을 허용합니다.
# firewall-cmd --permanent --add-service=http
그런 다음 외부 IP의 http 트래픽을 내부 IP의 포트 80으로 전달합니다.
# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=10.0.0.11
SSH 서비스에서도 동일한 작업을 수행할 수 있습니다.
답변4
먼저 Linux 게이트웨이에서 라우팅을 활성화합니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
그런 다음 네트워크 인터페이스(예: eth1) 및 원하는 포트에 다음 규칙을 추가합니다.
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.2
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.2
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
로 규칙을 확인하면 iptables -L -v
pkts 및 bytes 열에 일치하는 규칙이 표시됩니다.