Amazon Linux를 실행하는 AWS EC2 인스턴스가 있고 eth0 및 eth1이라는 두 개의 ENI(Elastic Network Interface)가 연결되어 있습니다. eth0의 공용 IP에 연결하고 있습니다. 암호화되지 않은 트래픽을 eth1에서 라우팅하려는 것을 제외하고는 모든 것이 훌륭하게 작동합니다. 즉, 클라이언트가 암호화된 VPN 터널을 설정하기 위해 eth0에 연결하면 암호화되지 않은 인터넷 트래픽이 eth1 안팎으로 라우팅되고 eth0의 터널을 통해 다시 라우팅됩니다.

몇 시간 동안 시도했음에도 불구하고 이 구성이 작동하도록 iptables에 대해 충분히 알지 못합니다. 나는 이것이 간단한 것이길 바라고 있습니까?

소스에서 최신 버전의 OpenVPN을 설치하고 다음을 수행했습니다.

  1. 인터페이스에서 비활성화된 소스/대상 확인
  2. "rc.local"에 다음을 추가했습니다. echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  3. 다음 iptables 명령을 추가했습니다. iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth0 -j MASQUERADE

내 서버 구성 파일은 다음과 같습니다.

port 443
proto tcp-server
dev tun
tls-server
server 10.18.14.0 255.255.255.0

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/vpnserver.crt
key /etc/openvpn/pki/vpnserver.key
dh /etc/openvpn/pki/dh.pem

ifconfig-pool-persist ipp2.txt 
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 5 15
comp-lzo
max-clients 5
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn_road.log
verb 6 
mute 20

tun-mtu 1500
auth SHA1
keysize 128
cipher BF-CBC
answer

라우팅을 설정해야 합니다. 규칙은 괜찮아 보이지만 MASQ 규칙을 변경해야 합니다.

iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth1 -j MASQUERADE

또한 발신 패킷에 대한 몇 가지 간단한 규칙을 제안합니다.

# Allows packets from connections initiated by the box or already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

이제 라우팅에 관해서는 eth0을 통한 기본 경로가 있다고 가정하는 서버 자체가 아닌 eth1을 통해서만 OpenVPN 클라이언트가 종료되기를 원한다고 가정합니다. OpenVPN 클라이언트를 위한 새 라우팅 테이블을 생성해야 하며 이를 ovpn-inet이라고 합니다.

편집 /etc/iproute2/rt_tables, 끝에 다음을 삽입하고 저장하십시오.

1 ovpn-inet

그런 /etc/sysconfig/network-scripts/route-eth1다음 <gw on eth1>내에서 및 기타 속성을 대체하여 다음 콘텐츠로 생성 합니다 <>.

default via <gw for eth1> dev eth1 table ovpn-inet
<local network on eth1> dev eth1 src <eth1 ip adress> table ovpn-inet

이제 생성 /etc/sysconfig/network-scripts/rule-eth1

from <ip address of eth1>/32 table ovpn-inet
from 10.18.14.0/24 table ovpn-inet
to <ip address of eth1>/32 table ovpn-inet

또한 성능을 위해 OpenVPN을 UDP로 전환하는 것이 좋습니다. 이렇게 하면 TCP를 통해 필요한 경우 HTTPS 서버를 실행할 수도 있습니다. 또한 tls-crypt설치를 약간 강화하는 간단한 방법으로 OpenVPN 서버 구성에서 사용하는 것을 고려 하십시오.

proto udp4

이제 네트워킹을 다시 시작하여 변경 사항을 적용하십시오.

/etc/init.d/network restart