저는 VPS 시스템에서 두 개의 lxc 컨테이너를 실행하고 있으며 iptables 세계가 처음이기 때문에 외부 트래픽을 컨테이너로 전달하는 규칙을 만들려고 합니다. 첫 번째 항목(192.168.1.2)은 openvpn 서버를 실행하고 두 번째 항목(192.168.1.4)은 웹 서버를 실행합니다. 지금까지는 openvpn lxc만 사용하고 다음 iptables 규칙을 사용하여 트래픽을 전달하고 있습니다.
# Generated by iptables-save v1.4.21 on Fri Apr 28 16:07:58 2017
*filter :INPUT ACCEPT [1189211:150089991] :FORWARD ACCEPT [902865:826112449] :OUTPUT ACCEPT [1324099:212970374] COMMIT
# Completed on Fri Apr 28 16:07:58 2017
# Generated by iptables-save v1.4.21 on Fri Apr 28 16:07:58 2017
*nat :PREROUTING ACCEPT [36:1998] :INPUT ACCEPT [17:858] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.1.2:1194
-A POSTROUTING -o eth0 -j MASQUERADE COMMIT
# Completed on Fri Apr 28 16:07:58 2017
이제 웹 서버를 설정하고 싶습니다. http 트래픽을 웹 서버 컨테이너로 전달하기 위해 이 iptables 규칙을 추가했습니다.
iptables -t nat -A PREROUTING -p tcp -m conntrack --ctstate NEW --dport 80 -j DNAT --to-destination 192.168.1.4:80
문제는 포트 80으로 전달하는 것이 작동하는 것처럼 보이지만(nginx의 시작 페이지에 액세스할 수 있음) openvpn 클라이언트가 적절한 인터넷 연결을 가지고 있지 않다는 것입니다(외부 세계에 ping을 보낼 수 있음에도 불구하고). 즉, 사이트가 매우 느리게 로드되고 일부 다른 사이트는 전혀 로드되지 않습니다(http 트래픽이 어딘가에서 손실된 것 같습니다). 위 규칙을 제거하면 openvpn 클라이언트 연결의 모든 것이 예상대로 작동하지만 http 서버는 손실됩니다.
추신: 이것이 최종 규칙입니다.
# Generated by iptables-save v1.4.21 on Fri Apr 28 16:39:24 2017
*filter
:INPUT ACCEPT [1190228:150215153]
:FORWARD ACCEPT [902877:826113261]
:OUTPUT ACCEPT [1325229:213163664]
COMMIT
# Completed on Fri Apr 28 16:39:24 2017
# Generated by iptables-save v1.4.21 on Fri Apr 28 16:39:24 2017
*nat
:PREROUTING ACCEPT [1:44]
:INPUT ACCEPT [1:44]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.1.2:1194
-A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j DNAT --to-destination 192.168.1.4:80
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Apr 28 16:39:24 2017
또한 전달 규칙을 먼저 작성한 다음 입력 체인 규칙을 작성합니다.
충돌 없이 두 프로토콜을 모두 사용할 수 있는 방법이 있습니까?
감사해요.